在C ++ 14中:
对于任何整数或枚举类型T
以及任何表达式expr
:
之间是否有区别:
struct S { T t { expr }; };
和
struct S { T t = { expr }; };
更新:
我[dcl.init.list]p3b5
说到:
如果初始化列表具有单个E类型的元素,并且T不是引用类型,或者它的引用类型与E引用相关,则从该元素初始化对象或引用。
我相信这句话既适用于直接列表初始化也适用于复制列表初始化。
所以我认为答案是否定的,没有区别。
如果T是非类类型,则在必要时使用标准转换将other的值转换为T的cv不合格版本
因此应该没有区别。这些初始化的区别只适用于类类型:拷贝初始化并没有考虑explicit
构造函数和explicit
用户自定义转换操作,直接初始化呢。整数和枚举类型都没有。
编辑:
@ᐅJohannes Schaub-litbᐊ回答了一个与此相关的问题(仅关于括号,而不是括号),并且他引用8.5/14
了类似的措辞(强调我的意思):
初始化的形式(使用括号或=)通常是无关紧要的,但是当初始化器或要初始化的实体具有类类型时,它就很重要;见下文。如果要初始化的实体不具有类类型,则带括号的初始化器中的expression-list应为单个表达式。
我也找不到{}
标准中的对应对象。我希望这是足够的论据来支持没有不同的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句