【发布时间】:2011-10-31 06:21:31
【问题描述】:
我找到了几个使用 {...} 的新 Initializer Syntax 示例。但是这些例子已经很老了。我只是想核对一下——目前的情况是否仍然如所描述的那样?
在每个上下文(尤其是模板)中,以下源代码片段始终是明确的——无论T 和v 是什么。
-
T{v};-- 总是构造一个类型为T的临时变量,并使用值v对其进行初始化。 -
T x{v};-- 使用值v初始化了T类型的变量x。 -
T x = {v};-- 相同,因为=在这里只是可选的。 -
T a[] = {v};-- 使用值v初始化数组的所有元素。 -
p = new T{v};-- 在堆上分配一个T类型的对象,并用值v对其进行初始化。
所以还是这样,告诉人们“更喜欢{}-syntax,你的源代码不会有不同的含义,这取决于T和v是什么” .
【问题讨论】:
-
这真的很难回答,因为最终标准尚未公开。我尝试查看第 8.5 节的活动问题。一切似乎都与小问题有关。所以我认为答案是“是”,但我不太确定。
-
是的,我也尝试关注讨论。不过,有些人必须有权访问最终版本... ;-)
-
请记住
T a[] = {v};与T a[1] = {v};相同,与T a[2] = {v};非常不同(如果v只是一个值)跨度>
标签: c++11 initialization curly-braces