c++ - 非静态数据成员初始化

标签 c++ c++11

按照C++标准,下面三种结构体定义有区别吗?

struct Foo
{
    int a;
};

struct Foo
{
    int a{};
};

struct Foo
{
    int a{0};
};

最后两个是C++11。

最佳答案

给定第一个定义,如果您创建一个具有自动存储持续时间的 Foo 实例,a 将被取消初始化。您可以执行聚合初始化来初始化它。

Foo f{0};  // a is initialized to 0

Foo 的第二个和第三个定义都将数据成员a 初始化为0

在 C++11 中,2 和 3 都不是 aggregates , 但 C++14 changes that rule因此尽管添加了 brace-or-equal-initializer,它们仍保持聚合。

关于c++ - 非静态数据成员初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937167/

相关文章:

python - Cython 的 C++ API 声明失败

c++ - CRTP 派生类方法的返回类型的转发

c++ - 不完整类型的无效使用(类方法特化)

c++ - 在 C++ 中使用 this 指针初始化一个类对象

C++ 多线程 - 内存同步

c++ - 如何比较限制小数位的 double 值?

c++ - Char 到 ascii 码转换并返回到 char

c++ - 这个例子中的qGetPtrHelper有什么用?

c++ - 选择 "common functionality"迭代器类别

c++ - 输入/输出文件(数独求解器)