Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/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+中复制构造函数+;_C++_Constructor_Casting_Return_Copy Constructor - Fatal编程技术网

C++ 返回时在C+中复制构造函数+;

C++ 返回时在C+中复制构造函数+;,c++,constructor,casting,return,copy-constructor,C++,Constructor,Casting,Return,Copy Constructor,我正在努力理解以下几点 #include <iostream> class Number { int _value; public: Number(int number) : _value(number) { std::cout<<"constructed!\n"; } Number(const Number& other) : _value(other._value) { std::cout<<"copie

我正在努力理解以下几点

#include <iostream>

class Number {
  int _value;
public:
  Number(int number) : _value(number) { std::cout<<"constructed!\n"; }
  Number(const Number& other) : _value(other._value) { std::cout<<"copied!\n"; }
  ~Number() { std::cout<<"destructed!\n"; }
};

Number create_number(int value) {
  Number out(value);
  return out;
}

int main() {
  Number my_number = create_number(10);
}
我希望在
create\u number
中构造一个对象,将其复制到函数的输出,然后在函数返回后销毁

这样的事情似乎发生了,因为如果我让复制构造函数显式

explicit Number(const Number& other) : _value(other._value) { std::cout<<"copied!\n"; }
编译器很高兴,我得到了预期的输出

constructed!
copied!
destructed!
destructed!
我觉得我缺少了一些关于
返回
、复制构造函数和/或(隐式)转换的内容。有人能解释一下吗?

没问题。没有太多的C++标准的晦涩语言,在大多数情况下,编译器可以回避(优化)拷贝,但不需要。这与任何其他优化一样

有趣的是,这是一个罕见的例外,在这种情况下,优化的副作用是可以观察到的-请参阅这些链接中的注释。

这就是。没有太多的C++标准的晦涩语言,在大多数情况下,编译器可以回避(优化)拷贝,但不需要。这与任何其他优化一样


有趣的是,这是一个罕见的例外,在这里可以观察到优化的副作用-请参阅这些链接中的注释。

查找“NRVO”。查找“NRVO”。谢谢!我想现在终于到了读一些我过去一直回避的话题的时候了。谢谢!我想现在终于到了读一些我过去一直回避的话题的时候了。
return Number(out);
return (Number)out;
constructed!
copied!
destructed!
destructed!