相关疑难解决方法(0)

C++中如何将结构体初始化为0

这是一个相关的 C 答案,在 C++ 中不起作用(作为结构的零初始化器):Initializing a struct to 0。提出的解决方案之一是:

myStruct _m1 = {0}; 
Run Code Online (Sandbox Code Playgroud)

这在 C 中工作正常,但在 C++ 中不起作用。:( :

错误:无法使用“int”类型的右值初始化“myScope::MyStruct”类型的成员子对象。

如何在 C++ 中对结构体进行零初始化?

有关的:

  1. 在 C 中将结构体初始化为 0:将结构体初始化为 0
  2. 更新:(一个相邻但不重复的问题,结果也非常有用)用空花括号初始化

也可以看看:

  1. [相邻相关,但适用于 C 风格数组,而不是结构]如何将数组的所有成员初始化为相同的值?

致投票结束此问题的人们:

我的问题不是这个其他问题的重复(Initialization with empty curlybraces),因为这个其他问题不是询问在 C++ 中初始化结构体的各种方法以及为什么 C 方法不起作用,而是它们是询问为什么 C++ 关键字会explicit破坏他们的初始化技术之一。两个不同的问题。不重复。

我问的后续问题:

  1. 为什么不初始化 C++ 结构体以将= {0}其所有成员设置为 0?

c++ struct initialization

32
推荐指数
1
解决办法
5万
查看次数

如何在添加成员时保持struct的初始化?

我有一个问题,有点跟进:

初始化结构中的默认值

我有一个已经有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)

c++ c++03

9
推荐指数
1
解决办法
206
查看次数

结构体成员的默认值

(我确定这个问题已经得到回答,我只是不确定用什么词来提问。如果有人能告诉我正确的术语是什么,那就太棒了!)

我正在HashSetC++ 中为数据结构类实现 a ,我有一个关于 C++ 语法的问题。这是我的代码:

struct HashNode
{
    T value;
    HashNode* next = nullptr;
};
Run Code Online (Sandbox Code Playgroud)

这段代码会正确初始化next指向nullptr何时new HashNode被调用的指针吗?如果不是,nextafter的值是new HashNode多少?

c++ initialization initializer c++11

5
推荐指数
1
解决办法
3891
查看次数

C++ 结构体的存储持续时间和成员初始化

#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 段: …

c++ struct initialization member storage-duration

3
推荐指数
1
解决办法
820
查看次数