【发布时间】:2023-03-11 00:24:02
【问题描述】:
#include <iostream>
class studant {
public:
studant () {
std::cout<<"studant"<<std::endl;
}
studant(const studant& a) {
std::cout<<"copy studant (&)"<<std::endl;
}
studant(studant&& a) {
std::cout<<"move studant (&)"<<std::endl;
}
studant maximum () {
studant c1;
return c1;
}
};
studant create () {
studant c1;
return c1;
}
int main()
{
studant c2;
studant c3=c2.maximum ();
studant c4=create ();
}
请看上面的代码为什么“studant c3=c2.maximum()”和“studant c4=create()”没有调用复制或移动构造函数。请解释一下。
【问题讨论】:
-
您已经自己标记了答案:copy elision,编译器将在尽可能按值返回对象时应用它。
-
@PaulSanders 标签是由 David 的编辑添加的。
-
@t.niese 好的,抱歉,错过了。
标签: c++ copy-elision nrvo