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...

コピーコンストラクタの呼び出しはなく、デストラクタの1つだけです。

于 2012-07-30T22:18:53.347 に答える