#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 = 4196960
_protected = 0
_private = 4196368
所有三个成员都未初始化。但是只有public
和private
成员中有垃圾值。为什么将protected
成员初始化为零?有什么理由吗?
g ++(Ubuntu 5.4.0-6ubuntu1〜16.04.11)5.4.0 20160609
-std = c ++ 11
答案 0 :(得分:1)
首先,请注意,读取uninitialized variables是未定义的行为。
您需要为您的类定义一个构造函数。
这与访问说明符无关。只是发生output.mp4
成员位于先前包含值0的地址(对于您而言)。
最好不要使用下划线开头的变量名。它们是保留的。 可以在类范围内使用它们,但切记不要在全局范围内使用它们。
5.10标识符[lex.name]
3另外,某些标识符保留供C ++实现使用,否则不得使用;没有诊断是 必须。
...(3.2)每个以下划线开头的标识符都保留给 在全局名称空间中用作名称的实现。