【问题标题】:C++ initializer lists with fewer elements than the struct元素少于结构的 C++ 初始值设定项列表
【发布时间】:2016-08-09 01:01:53
【问题描述】:

当我使用初始化列表创建一个结构,但初始化列表包含的元素比我的结构少时,我看到剩余的元素被初始化为零。

这是一个未定义的行为,我看到零是因为我的编译器 (VS2015) 决定为我将内存归零吗?

或者有人可以向我指出在 C++ 中解释这种行为的文档吗?

这是我的代码:

struct Thing {
    int value;
    int* ptr;
};


void main() {
    Thing thing { 5 };
    std::cout << thing.value << " " << thing.ptr << std::endl;
}

这就是它打印的内容:

5 00000000

最后一个元素是在没有初始化器的情况下归零的元素。

【问题讨论】:

  • 这个{ 5 }只设置第一个值5,其余的0
  • @DimChtz 所以就像初始化一个数组一样? int a[5] = {5} 会将我所有未指定的元素设置为零。
  • @DimChtz 你知道如何在文档中搜索它吗?
  • Herehere(在后者中包含初始化列表没有元素的项目符号)。

标签: c++ struct initialization


【解决方案1】:

这是定义的行为。根据aggregate initialization的规则,剩余成员ptr将是value-initialized,即zero-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) (它执行非类类型的值初始化和具有默认构造函数的非聚合类,以及聚合的聚合初始化)。如果引用类型的成员是这些剩余成员之一,则程序是非良构的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多