14

Visual C++ 不执行返回值优化吗?

#include <cstdio>
struct Foo { ~Foo() { printf("Destructing...\n"); } };
Foo foo() { return Foo(); }
int main() { foo(); }

我编译并运行它:

cl /O2 test.cpp
test.exe

它打印:

破坏……
破坏……

为什么它不执行 RVO?

4

1 回答 1

16

当我用这个测试时:

#include <iostream>
struct Foo { 
    Foo(Foo const &r) { std::cout << "Copying...\n"; }
    ~Foo() { std::cout << "Destructing...\n"; }
    Foo() {}
};

Foo foo() { return Foo(); }

int main() { Foo f = foo(); }

...我得到的输出是:

Destructing...

没有调用复制构造函数,只有一个析构函数。

于 2012-07-30T22:18:53.347 回答