Я, возможно, задаю глупый вопрос, но я просмотрел страницу википедии для RVO здесь и не мог перестать задаваться вопросом, такое поведение неправильно. Я попробовал это на своей машине, и RVO полностью запустился, несмотря на уровень оптимизации. Что, если в конструкторе действительно происходит что-то БОЛЬШОЕ ? Я знаю, что не должно, но что если? Я могу' Я не понимаю, почему RVO все равно будет происходить, когда в конструкторе есть побочные эффекты.
EDIT: -fno-elide-constructors
, кажется, останавливает RVO. Но вопрос остается.
EDIT2: Если серьезно, сколько людей знают о чем-то подобном? Возможно, это стандартно, но, на мой взгляд, это все еще действительно уродливая функция. По крайней мере, компиляторы должны отключить его по умолчанию и предоставить переключатель для людей, которые об этом знают. :)
РЕДАКТИРОВАТЬ 3: Я все еще настаиваю на том, что это действительно плохо. :). Я не думаю, что знаю какое-либо другое языковое ограничение, подобное этому, которое прямо противоречит синтаксису языка. Все остальное вызывает ошибки компилятора или компоновщика, верно?