可能重复:
non-copyable objects and value initialization: g++ vs msvc
Value-initializing an automatic object?
请考虑以下声明:
实际上不可能对自动对象进行值初始化。
这句话是真的吗?我认为这样做没有问题:
int main()
{
int i = int();
}
答案 0 :(得分: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
}