And*_*zos 10 c++ initialization language-lawyer c++14
在C++ 14中:
对于任何整数或枚举类型T以及任何表达式expr:
之间有什么区别:
struct S { T t { expr }; };
Run Code Online (Sandbox Code Playgroud)
和
struct S { T t = { expr }; };
Run Code Online (Sandbox Code Playgroud)
更新:
我得到了[dcl.init.list]p3b5:
如果初始化列表具有E类型的单个元素且T不是引用类型或其引用类型与E引用相关,则从该元素初始化对象或引用.
我相信这个引用适用于直接列表初始化和复制列表初始化.
所以我认为答案是否定的,没有区别.
如果你看一下直接初始化和复制初始化引用,你会发现相同的单词:
如果T是非类类型,则在必要时使用标准转换将其他值转换为cv非限定版本的T
所以应该没有区别.这些初始化的区别只适用于类类型:拷贝初始化并没有考虑explicit构造函数和explicit用户自定义转换操作,直接初始化呢.积分和枚举类型都没有.
编辑:
@ᐅJohannesSchaub - litbᐊ回答了一个相对问题(只有括号,而不是大括号),他引用8.5/14了类似的措辞(强调我的):
初始化的形式(使用括号或=)通常是无关紧要的,但是当初始化器或正在初始化的实体具有类类型时,它确实很重要 ; 见下文.如果正在初始化的实体没有类类型,则带括号的初始值设定项中的表达式列表应为单个表达式.
我也找不到{}标准中的对应物.我希望这足以支持那些没有差异的答案.
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |