c++初始化列表的元素比结构体少
C++ initializer lists with fewer elements than the struct
当我使用初始化列表创建一个结构体,但初始化列表包含的元素比我的结构体少时,我看到其余的元素都用0初始化。
这是一个未定义的行为,我看到零,因为我的编译器(VS2015)决定为我零内存?
或者有人能告诉我在c++中解释这种行为的文档吗?
这是我的代码:
struct Thing {
int value;
int* ptr;
};
void main() {
Thing thing { 5 };
std::cout << thing.value << " " << thing.ptr << std::endl;
}
它打印的内容是:
5 00000000
最后一个元素是在没有初始化项的情况下被归零的元素
这是已定义的行为。根据聚合初始化规则,剩余成员ptr
将被value-initialized,即0 -initialized为NULL指针。
(强调我的)
如果初始化子句的个数少于
and bases (since C++17)
的成员个数,或者初始化列表完全为空,则and bases (since C++17)
的剩余成员按照通常的列表初始化规则(对非类类型和具有默认构造函数的非聚合类执行值初始化,对聚合类执行聚合初始化)由空列表初始化by their default initializers, if provided in the class definition, and otherwise (since C++14)
。如果引用类型的成员是这些剩余成员之一,则程序是病态的。
相关文章:
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 包含 std::list 的结构体的 C++ 初始化
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何使用结构体的向量数组?
- 如何使用结构体在C++中更改这些代码?
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 在C++中更改结构内部元素的方法?
- 我应该如何在C++中使用结构体解决输入失败的问题?
- Qsort() 比较结构体整数的总和
- 如何使用迭代器指向结构体c++的向量
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 对的向量和包含两个元素的结构体的向量的内存布局的区别- c++ /STL
- 为了查看结构体中的另一个元素而溢出一个元素是否合法?
- 二维矢量结构体元素计数
- 在模板类中使用结构体作为参数并访问它们的元素
- 将结构体元素设置为定义中的值
- 结构体的向量:添加元素的c++
- c++初始化列表的元素比结构体少