(来自访谈)调用函数DoSomething时可能会执行多少个结构A副本?如果副本的数量是可变的,它如何取决于影响它的因素?
struct A
{
int data[256];
};
A DoSomething(A a)
{
A b = a;
b.data[rand()%256] = 1;
return b;
}
答案 0 :(得分:-2)
3份
传递参数,复制值
创建新的结构对象
从功能返回
Gcc有一个名为返回值优化的优化,它可以防止调用第三个拷贝构造函数。
Gcc还标记 -fno-elide-constructors ,在所有情况下禁用该优化和复制构造函数调用