积分或枚举类型的T t {x}和T t = {x}之间的差异?

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引用相关,则从该元素初始化对象或引用.

我相信这个引用适用于直接列表初始化复制列表初始化.

所以我认为答案是否定的,没有区别.

Log*_*uff 5

如果你看一下直接初始化复制初始化引用,你会发现相同的单词:

如果T是非类类型,则在必要时使用标准转换将其他值转换为cv非限定版本的T

所以应该没有区别.这些初始化的区别只适用于类类型:拷贝初始化没有考虑explicit构造函数和explicit用户自定义转换操作,直接初始化呢.积分和枚举类型都没有.

编辑:
@ᐅJohannesSchaub - litbᐊ回答了一个相对问题(只有括号,而不是大括号),他引用8.5/14了类似的措辞(强调我的):

初始化的形式(使用括号或=)通常是无关紧要的,但是当初始化器或正在初始化的实体具有类类型时,它确实很重要 ; 见下文.如果正在初始化的实体没有类类型,则带括号的初始值设定项中的表达式列表应为单个表达式.

我也找不到{}标准中的对应物.我希望这足以支持那些没有差异的答案.