其他分享
首页 > 其他分享> > c – 等号是否会对括号初始化产生影响?例如. ‘T a = {}’vs’T a {}’

c – 等号是否会对括号初始化产生影响?例如. ‘T a = {}’vs’T a {}’

作者:互联网

以下是在C 11中初始化变量的两种方法:

T a {something};
T a = {something};

我在所有可以想到的场景中测试了这两个,但我没有发现差异. This answer表明两者之间存在细微差别:

For variables I don’t pay much attention between the T t = { init }; or T t { init }; styles, I find the difference to be minor and will at worst only result in a helpful compiler message about misusing an explicit constructor.

那么,两者之间有什么区别吗?

解决方法:

我所知道的唯一显着差异在于显式构造函数的处理:

struct foo
{
    explicit foo(int);
};

foo f0 {42};    // OK
foo f1 = {42};  // not allowed

这类似于“传统”初始化:

foo f0 (42);  // OK
foo f1 = 42;  // not allowed

见[over.match.list] / 1.

除此之外,C 11中存在一个缺陷(见CWG 1270),只允许使用T a = {something}形式的大括号.

struct aggr
{
    int arr[5];
};

aggr a0 = {1,2,3,4,5};  // OK
aggr a1 {1,2,3,4,5};    // not allowed

标签:list-initialization,c,c11,initialization
来源: https://codeday.me/bug/20190928/1828029.html