Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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+中的对象返回+;_C++_Stack_Return_Return Value - Fatal编程技术网

C++ C+中的对象返回+;

C++ C+中的对象返回+;,c++,stack,return,return-value,C++,Stack,Return,Return Value,当返回对象时,我认为返回指针或引用是正确的方法,因为在返回对象时会创建临时对象 在本例中,hello()函数返回类型为A的对象,返回的值存储在对象A中 A hello() { A a(20); // <-- A object is created in stack cout << &a << endl; return a; // <-- Temporary object is created for return value }

当返回对象时,我认为返回指针或引用是正确的方法,因为在返回对象时会创建临时对象

在本例中,hello()函数返回类型为A的对象,返回的值存储在对象A中

A hello()
{
    A a(20); // <-- A object is created in stack
    cout << &a << endl;
    return a; // <-- Temporary object is created for return value
}

void test1()
{
    A a = hello(); // copy constructor is called
    cout << &a << endl;
}
执行结果:

*I'm in
0x7fff62bb30c0 <-- from hello()
0x7fff62bb30c0 <-- from test1()
*I'm out
*我在

0x7fff62bb30c0应该有很多非常类似的问题。这是一个:这确实是一个重复:寻找返回值优化。另外,如果
类a
有一个移动构造函数,C++将保证复制构造函数永远不会被调用。
*I'm in
0x7fff62bb30c0 <-- from hello()
0x7fff62bb30c0 <-- from test1()
*I'm out