c++ - 聚合内标量的大括号初始化

标签 c++ c++11 list-initialization aggregate-initialization

知道这是有效的 c++11

int i {1};

这个有效吗?

int j[] {{1}};

GCC 给出错误,发出警告。

最佳答案

这是无效的,因为 j 是一个 int(标量)数组。你可以 仅对本身就是聚合的成员使用嵌入式大括号。

#include <initializer_list>

struct T
{
    int x, y;    
};

int main() 
{
    int j[] {{1}}; // error, int is scalar
    T t[] {{1,2}}; // OK, T is aggregate
}

关于c++ - 聚合内标量的大括号初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18910056/

相关文章:

c++ - 项目的 QTreeWidget

c++ - 并发写入 vector<bool>

c++ - 重载构造函数中的成员初始化

c++ - Brace-init-list 和赋值

c++ - 在 C++ 中从屏幕选择创建位图时的黑色图像

c++ - Arm GNU 编译器 : Assembly generated from ternary optimized by superfluous cast

c++ - 数据模型问题

c++ - 如何将正则表达式 vector 与一个字符串匹配?

c++ - C++ 标准是否允许添加两个整数(基本类型 int)来引发 C++ 异常?

c++ - 为什么我不能对具有继承的结构使用列表初始化?