当我从函数返回时,有人可以解释为什么向量深层复制不起作用将会很有帮助
我有一个带构造函数的结构和像这样的复制构造函数
struct {
A() { cout<<"Constructor..."<<endl; }
A(const A &) { cout<<"Copy Constructor...."<<endl;
};
如果我写这样的主程序
int main() {
A a1; // constructor gets called here
vector<A> vec;
vec.push_back(a1) // Copy constructor gets called here
vector<A> copyvec = vec; // Again copy constructor gets called here
}
但是,如果我改变这样的代码
vector<A> retvecFunc() {
A a1; // Constructor gets called
vector<A> vec;
vec.push_back(a1); // Copy Constructor gets called
return vec; // copy constructor **DOESN'T GETS CALLED**
}
我的主要功能是
int main() {
vector<A> retVec = retvecFunc();
return 0;
}
答案 0 :(得分:3)
编译器实现*命名返回值优化&#34;。
vec
的附加临时副本不已创建。
即使存在副作用(例如在您的情况下不打印控制台消息),也允许编译器执行此操作。
从C ++ 17开始,编译器必须实现这一点。