C++的语义规定,在函数中返回局部对象时,会调用该类的copy constructor.
#include <iostream> using namespace std; class Test { public: Test(int tt) :t(tt) {} Test(Test& test) { cout << "copy constructor" << endl; t = test.t; } int t; }; Test func() { Test test(5); return test; } int main() { cout << func().t << endl; return 0; }
在vc中,运行结果符合上述语法规定.
在g++中,却看不到copy constructor 的调用.
g++编译时,做了named return value optimization优化, 若想关闭该优化,使用 –fno-elide-constructors选项进行编译.