码:
#include <iostream>
using namespace std;
class Example
{
public:
int _public;
friend ostream& operator<< (ostream& stream, Example& o);
protected:
int _protected;
private:
int _private;
};
ostream& operator<< (ostream& stream, Example& o) {
stream <<
"_public=" << o._public << endl <<
"_protected=" << o._protected << endl <<
"_private=" << o._private << endl;
return stream;
}
int main(int argc, char const *argv[])
{
Example e;
cout << e << endl;
return 0;
}
输出量
题:
这三个成员都未初始化。但是只有
public
和private
成员中具有垃圾值。为什么将protected
成员初始化为零?有什么理由吗?g++版本和标志
最佳答案
首先,请注意,读取uninitialized variables是未定义的行为。
您需要为您的类定义一个构造函数。
这与访问说明符无关。只是在您的情况下protected
成员位于先前包含值0的地址。
另外最好不要使用下划线开头的变量名。它们是保留的。
允许在类范围内使用它们,但请记住不要在全局范围内使用它们。
关于c++ - protected 成员的默认值C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54663005/