假设我有以下结构:
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/