Почему Visual C++ не выполняет оптимизацию возвращаемого значения для самого тривиального кода?
Visual C++ не выполняет оптимизацию возвращаемого значения?
#include <cstdio>
struct Foo { ~Foo() { printf("Destructing...\n"); } };
Foo foo() { return Foo(); }
int main() { foo(); }
Я компилирую и запускаю его:
cl /O2 test.cpp
test.exe
И это печатает:
... Разрушение
... Разрушение
Почему он не выполняет RVO?
1 ответ
Решение
Когда я проверяю это:
#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...
Нет вызова конструктора копирования, а только один из деструктора.