C++ 自动变量的值初始化
可能重复:C++ 自动变量的值初始化,c++,value-initialization,C++,Value Initialization,可能重复: 考虑以下陈述: 对自动对象进行值初始化实际上是不可能的 这句话是真的吗?我认为这样做没有问题: int main() { int i = int(); } 术语值初始化在8.5[dcl.init]第16段第4项中定义: 如果初始值设定项为(),则对象的值已初始化 也就是说,自动变量的值初始化如下所示: int i(); 但是,这是一个名为i的函数的声明,返回int。因此,不可能初始化自动值。在您的示例中,临时值已初始化,自动变量已复制初始化。您可以验证这确实需要使用没
考虑以下陈述: 对自动对象进行值初始化实际上是不可能的 这句话是真的吗?我认为这样做没有问题:
int main()
{
int i = int();
}
术语
值初始化
在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
}
自C++11以来:
inti{}代码>执行(另请参见)。您的i
是复制初始化的,而不是值初始化的。只有临时值是值初始化的。和的可能重复:int i(6)是值初始化吗?int i(int())是什么意思?这是值初始化吗??T*p2=新的T();格式inti(6)
是直接初始化(8.5[dcl.init]第15段)inti(int())
声明一个名为i
的函数,该函数返回一个int
,并将一个不带参数的函数作为参数返回。在T*p2=newt()。