整数类型变量的奇数C / C ++初始化语法

时间:2013-07-05 14:06:39

标签: c++ c compilation

以下代码段与C / C ++编译器完美编译:

#include <stdio.h>
int main()
{
    int x = {5};         //<-- why this compiles?
    printf("x = %d",x);
    return 0;
}

输出为5x在这里以复合形式初始化,尽管它是整数类型。我想了解这里的转换以及原因。

2 个答案:

答案 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};