Согласно этой вики-странице следующий код:
#include <iostream>
struct C {
C() = default;
C(const C&) { std::cout << "A copy was made.\n"; }
};
C f() {
return C();
}
int main() {
std::cout << "Hello World!\n";
C obj = f();
}
может производить разные выходные данные в зависимости от компилятора и настроек этого компилятора.
Как я могу писать программы, если я не могу предсказать, как они будут себя вести (я действительно не могу знать, что любой данный компилятор в любой данной версии с любыми заданными настройками будет или не будет оптимизировать)? Существуют ли какие-либо общие рекомендации относительно копирования-исключения, которым я должен следовать?