c++ - C++ 中的聚合初始化安全

标签 c++ ada aggregate-initialization

假设我有以下结构:

struct sampleData
{
       int x;
       int y;
};

并且在使用时,我想将 sampleData 类型的变量初始化为已知状态。

sampleData sample = { 1, 2 } 

后来,我决定我需要在我的 sampleData 结构中存储额外的数据,如下所示:

struct sampleData
{
       int x;
       int y;
       int z;
};

据我了解,z 之前的数据结构遗留下来的两个字段初始化仍然是一个有效的语句,并且将被编译,用默认值填充缺失的字段。

这个理解对吗?我最近一直在 Ada 工作,它也允许聚合初始化,但会将类似的问题标记为编译错误。假设我对上述 C++ 代码的假设是正确的,是否有一种语言结构可以将缺少的初始化值识别为错误?

最佳答案

Aggregate Classes 支持以这种方式初始化变量.

如果您添加构造函数,那么问题就消失了,但是您需要稍微更改语法并且您失去了将 struct 存储在 union< 中的能力(除其他事项外)。

struct sampleData
{
    sampleData(int x, int y) : x(x), y(y) {}
    int x;
    int y;
};

sampleData sample( 1, 2 );

添加 z(并更改构造函数)会将 sample( 1, 2 ) 标记为编译错误。

关于c++ - C++ 中的聚合初始化安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6284507/

相关文章:

c++ - 使用 for loop int 声明打开多个文件

ada - 成员值的静态引用 - Ada

c++ - 缺少用户定义的构造函数是否违反了非默认可构造结构的标准?

c++ - 什么时候私有(private)构造函数不是私有(private)构造函数?

c++ - 我可以避免为 std::variant 中的每个结构显式编写构造函数吗?

c++ - 在调整窗口或拆分器大小时更改表格列宽

c++ - 候选函数不可行 : 1st argument ('const Node *' ) would lose const qualifier

c++ - 运行时不一致 DXVA 硬件视频解码

c++ - 在 Interfaces.C 中传递 boolean Ada 类型

sockets - GNAT.Sockets.Selector_Type 的地址子句是什么