这是一个相关的 C 答案,在 C++ 中不起作用(作为结构的零初始化器):Initializing a struct to 0。提出的解决方案之一是:
myStruct _m1 = {0};
Run Code Online (Sandbox Code Playgroud)
这在 C 中工作正常,但在 C++ 中不起作用。:( :
错误:无法使用“int”类型的右值初始化“myScope::MyStruct”类型的成员子对象。
如何在 C++ 中对结构体进行零初始化?
我的问题不是这个其他问题的重复(Initialization with empty curlybraces),因为这个其他问题不是询问在 C++ 中初始化结构体的各种方法以及为什么 C 方法不起作用,而是它们是询问为什么 C++ 关键字会explicit破坏他们的初始化技术之一。两个不同的问题。不重复。
我有一个问题,有点跟进:
我有一个已经有17个bool的结构,以及一个clear()将它们全部设置为的方法false.这是一个长期项目; 从现在开始,代码仍然可以使用并添加到.有没有办法初始化将自动扩展的所有成员,以便有人向结构中添加新成员不需要记住将它们添加到clear()方法中(除了评论说"请不要忘记")?
这个代码库目前不是C++ 11,所以我认为我不能在声明中进行初始化.
代码是这样的:
typedef struct {
bool doThingA;
bool doThingB;
bool doThingC;
bool doThingD;
// etc for several more bools
void clear() {
doThingA = false;
doThingB = false;
doThingC = false;
doThingD = false;
// etc...
}
} EnableFlags;
Run Code Online (Sandbox Code Playgroud) (我确定这个问题已经得到回答,我只是不确定用什么词来提问。如果有人能告诉我正确的术语是什么,那就太棒了!)
我正在HashSetC++ 中为数据结构类实现 a ,我有一个关于 C++ 语法的问题。这是我的代码:
struct HashNode
{
T value;
HashNode* next = nullptr;
};
Run Code Online (Sandbox Code Playgroud)
这段代码会正确初始化next指向nullptr何时new HashNode被调用的指针吗?如果不是,nextafter的值是new HashNode多少?
#include <iostream>
using namespace std;
struct A {
// Some Other Code
int x;
};
A a1;
int main(){
A a2;
cout << "a1.x = " << a1.x << endl;
cout << "a2.x = " << a2.x << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C++14 标准 (ISO/IEC 14882:2014) 第 8.5 节,第 12 段:
如果没有为对象指定初始化程序,则该对象是默认初始化的。当获得具有自动或动态存储期限的对象的存储时,该对象具有不确定值,如果没有对该对象执行初始化,则该对象保留一个不确定值,直到该值被替换(5.17)。[注意:具有静态或线程存储持续时间的对象是零初始化的,参见 3.6.2。- 尾注]
那么a1有静态存储持续时间和a2自动存储持续时间吗?的定义Struct A在全局命名空间以及a1声明中,而a2声明在块范围内(在main()函数内部)。
此外,第 3.6.2 节说:
第 1 段:
作为程序启动的结果,具有静态存储持续时间的非局部变量被初始化。
第 2 段: …