码:

#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;
}

输出量



题:

这三个成员都未初始化。但是只有publicprivate成员中具有垃圾值。为什么将protected成员初始化为零?有什么理由吗?

g++版本和标志

最佳答案

首先,请注意,读取uninitialized variables是未定义的行为。
您需要为您的类定义一个构造函数。
这与访问说明符无关。只是在您的情况下protected成员位于先前包含值0的地址。

另外最好不要使用下划线开头的变量名。它们是保留的。
允许在类范围内使用它们,但请记住不要在全局范围内使用它们。

关于c++ - protected 成员的默认值C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54663005/

10-12 20:48