可能重复: non-copyable objects and value initialization: g++ vs msvc Value-initializing an automatic object?
请考虑以下声明:
实际上不可能对自动对象进行初始化。
这个陈述是真的吗?我认为这样做没问题:
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
}