在C ++标准中它表示必须初始化const内置类型变量的定义?

时间:2018-03-01 13:15:39

标签: c++ language-lawyer

我一直在N4713中寻找这个超过两个小时但无济于事。

2 个答案:

答案 0 :(得分:9)

我有一个C ++ 14草案,在7.1.6.1 [dcl.type.cv]中说:

  

如8.5中所述,定义了一个对象或子对象   const限定类型必须指定初始值设定项或受其约束   缺省初始化

8.5 [dcl.init]说(第7条):

  

默认初始化T类型的对象意味着:

[对于非类,非数组类型]:

  

...没有执行初始化

紧接着:

  

如果程序要求对const限定类型T的对象进行默认初始化,则T应为类类型   使用用户提供的默认构造函数。

因此const内置函数必须有一个初始化程序,否则它将被默认初始化并且不允许。

答案 1 :(得分:4)

它在N4713中以相当间接的方式措辞[dcl.init] 11.6 / 7:

  

如果程序要求对const限定类型T的对象进行默认初始化,T应为const-default-   可构造的类型或其数组。

不提供初始化会导致对象默认初始化。因此,如果它具有const合格且内置类型,则违反了" will"以上规则。