考虑以下语句:
对自动对象进行值初始化是不可能的。
这个说法是真的吗?我认为这样做没有问题:
int main()
{
int i = int();
}
考虑以下语句:
对自动对象进行值初始化是不可能的。
这个说法是真的吗?我认为这样做没有问题:
int main()
{
int i = int();
}
该术语value-initialization
在 8.5 [dcl.init] 第 16 段第 4 条中定义:
如果初始值设定项是 (),则对象是值初始化的。
也就是说,自动变量的值初始化如下所示:
int i();
但是,这是一个称为i
返回的函数的声明int
。因此,不可能对自动进行值初始化。在您的示例中,临时变量是值初始化的,而自动变量是复制初始化的。您可以验证这确实需要使用没有可访问复制构造函数的测试类来访问复制构造函数:
class noncopyable {
noncopyable(noncopyable const&);
public:
noncopyable();
};
int main() {
noncopyable i = noncopyable(); // ERROR: not copyable
}