如下,函数的返回值是类A的对象时,则函数返回时,
A的复制构造函数应该被调用:
class A
{
public:
int v;
A(int n) {
v = n;
};
A( const A & a) {
v = a.v;//①
cout << "Copy constructor called" << endl;
}
};
A Func() {
A b(4);
return b;
}
int main() {
cout << Func().v << endl;
return 0;
}
可是在实际输出中,却没有"Copy constructor called"输出。
我用的是CodeBlocks,编译器采用的是GCC,而GCC做了优化,返回值为对象时,不再产生临时对象。所以也就不再调用复制构造函数。
解决方案:
在编译命令中加入“-fno-elide-constructors”参数,具体操作如下:
CodeBlocks->Settings->Compiler->Global compilerSettings
A.png
完成!~