1

可能重复:
不可复制的对象和值初始化:g++ vs msvc
值初始化自动对象?

考虑以下语句:

对自动对象进行值初始化是不可能的。

这个说法是真的吗?我认为这样做没有问题:

int main()
{
    int i = int();
}
4

1 回答 1

3

该术语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
}

SINCE C++11int i{};完成这项工作(另请参见this)。

于 2012-02-19T04:54:31.753 回答