【发布时间】:2016-04-13 04:44:57
【问题描述】:
C++11 带来了新的通用初始值设定项,这很不错。问题:是否有任何用于初始化对象的旧语法被视为已弃用。在 C++03 中,一个对象可以被初始化为
Foo bar(x)Foo bar=Foo(x)
选项 (1) 是首选,因为它不涉及副本。在 C++11 中还有更多方法:
Foo bar{x}auto bar=Foo{x}
使用移动构造函数和赋值运算符,选项(4)也应该没问题。 (1) 是否被认为已被 (3) 或 (4) 弃用?
此外,在 C++03 中,规则是所有接受一个参数的构造函数都应该是显式的(除了复制 ctor)。其他构造函数总是显式的。使用广义初始化器,任何 ctor 都可以是隐式的。那么新规则是在任何地方都显式放置,还是只是在转换会暗示副作用(分配一堆内存,创建文件......)或有损(双浮动)?
【问题讨论】:
-
我认为你有几个很好的问题,但你真的应该将自己限制在每个“问题”一个问题上。 :)
-
也许是的,但一切都与初始化程序有关。
-
不确定,但 IMO 更合适的 2. 版本是
Foo bar = x(它与 1. 相同),为什么有人会明确地创建一个临时对象,只是为了调用 copy c'tor ? -
@user877329:您可以从关于 SO 的现有问题列表中看到,我们不会将某个主题的所有问题捆绑到一个问题中。 :)
标签: c++ c++11 deprecated c++03 initializer