Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自动变量的值初始化_C++_Value Initialization - Fatal编程技术网

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()。