【发布时间】:2021-03-23 23:09:29
【问题描述】:
我正在尝试理解以下内容
#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);
}
输出是
constructed!
destructed!
我本来希望在 create_number 内部构造一个对象,复制到函数的输出,然后在函数返回后销毁。
似乎会发生这样的事情,因为如果我明确复制构造函数
explicit Number(const Number& other) : _value(other._value) { std::cout<<"copied!\n"; }
编译器用no matching constructor for initialization of 'Number' 对return out 大喊大叫。如果我在create_number 中显式调用复制构造函数,甚至将数字out 转换为数字(嗯?)
return Number(out);
return (Number)out;
编译器很高兴,我得到了预期的输出
constructed!
copied!
destructed!
destructed!
我觉得我缺少关于 return、复制构造函数和/或(隐式)转换的一些内容。有人可以解释一下吗?
【问题讨论】:
-
查找“NRVO”。
标签: c++ constructor casting return copy-constructor