这段代码会执行多少份?

时间:2016-08-19 21:09:10

标签: c++

(来自访谈)调用函数DoSomething时可能会执行多少个结构A副本?如果副本的数量是可变的,它如何取决于影响它的因素?

struct A
{
    int data[256];
};

A DoSomething(A a)
{
    A b = a;
    b.data[rand()%256] = 1;
    return b;
}

1 个答案:

答案 0 :(得分:-2)

3份

  1. 传递参数,复制值

  2. 创建新的结构对象

  3. 从功能返回

  4. Gcc有一个名为返回值优化的优化,它可以防止调用第三个拷贝构造函数。

    Gcc还标记 -fno-elide-constructors ,在所有情况下禁用该优化和复制构造函数调用