带默认值的结构体的大括号(聚合)初始化

Brace (aggregate) initialization for structs with default values

本文关键字:聚合 初始化 默认值 结构体      更新时间:2023-10-16

用默认值初始化一个结构体是微不足道的:

struct X { int a; int b = 2; };

和使用大括号初始化器初始化结构体也很简单:

X x = {1, 3};

令人惊讶的是,init代码不会编译,直到我删除默认值。那么,在这种情况下我该如何进行init呢?我想保持X的POD没有c-tor

下面是一些与这个问题相关的文档:

http://en.cppreference.com/w/cpp/language/aggregate_initialization

在c++11中你的代码是无效的。在c++14中,它再次有效。

在c++ 11中,添加一个默认初始化可以防止带括号的init生效。在c++ 14中,它不需要。

在c++ 11中解决这个问题的一种方法是编写一个构造函数,其中A的值和b的值具有默认值。