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!