以下代码段与C / C ++编译器完美编译:
#include <stdio.h>
int main()
{
int x = {5}; //<-- why this compiles?
printf("x = %d",x);
return 0;
}
输出为5
。
x
在这里以复合形式初始化,尽管它是整数类型。我想了解这里的转换以及原因。
答案 0 :(得分:8)
C允许它:
(C99,6.7.8p11)“标量的初始值设定项应为单个表达式,可选择用括号括起来。”
C ++在C ++ 11,8.5.4p1
中有类似的规则答案 1 :(得分:3)
此处没有转换,它是变量初始化的标准定义方式。
8.5.4列表初始化[dcl.init.list]
1列表初始化是从braced-init-list初始化对象或引用。这样的初始化程序称为初始化程序列表,列表的逗号分隔的初始化程序子句称为初始化程序列表的元素。初始化列表可以为空。列表初始化可以在直接初始化或复制初始化上下文中进行;直接初始化上下文中的列表初始化称为直接列表初始化,复制初始化上下文中的列表初始化称为复制列表初始化。 [注意:可以使用列表初始化 - 作为变量定义中的初始化程序(8.5)
...
[例如: int a = {1};