gpt4 book ai didi

c++ - protected 成员的默认值 C++

转载 作者:行者123 更新时间:2023-11-30 04:52:00 24 4
gpt4 key购买 nike

代码:

#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

问题:

所有三个成员都未初始化。但是只有 publicprivate 成员中有垃圾值。为什么 protected 成员初始化为零?这是有原因的吗?


g++ 版本和标志

g++ (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609

-std=c++11

最佳答案

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

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

5.10 Identifiers [lex.name]

3 In addition, some identifiers are reserved for use by C++ implementations and shall not be used otherwise; no diagnostic is required.
...

(3.2) Each identifier that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com