Разве оптимизация возвращаемого значения (RVO) не является ошибкой?

Я, возможно, задаю глупый вопрос, но я просмотрел страницу википедии для RVO здесь и не мог перестать задаваться вопросом, такое поведение неправильно. Я попробовал это на своей машине, и RVO полностью запустился, несмотря на уровень оптимизации. Что, если в конструкторе действительно происходит что-то БОЛЬШОЕ ? Я знаю, что не должно, но что если? Я могу' Я не понимаю, почему RVO все равно будет происходить, когда в конструкторе есть побочные эффекты.

EDIT: -fno-elide-constructors , кажется, останавливает RVO. Но вопрос остается.

EDIT2: Если серьезно, сколько людей знают о чем-то подобном? Возможно, это стандартно, но, на мой взгляд, это все еще действительно уродливая функция. По крайней мере, компиляторы должны отключить его по умолчанию и предоставить переключатель для людей, которые об этом знают. :)

РЕДАКТИРОВАТЬ 3: Я все еще настаиваю на том, что это действительно плохо. :). Я не думаю, что знаю какое-либо другое языковое ограничение, подобное этому, которое прямо противоречит синтаксису языка. Все остальное вызывает ошибки компилятора или компоновщика, верно?

7
задан nakiya 12 October 2010 в 05:40
поделиться