Когда компилятор выполняет RVO?

Кажется, есть много вопросов о том, когда компилятор будет выполнять RVO или почему он не выполняет его в такой-то ситуации.

После прочтения http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
Кажется, я тоже не могу обернуться вокруг этого.

Обычно кажется, что «обычно» компилятор выполняет какую-то оптимизацию, но бывают случаи, когда это невозможно.

Если я правильно понимаю статью Дэйва Абрахамса, он на самом деле не предлагает возвращать по значению, за исключением соображений лучшей читабельности. Для меня это говорит о том, что для удобочитаемости и согласованности может быть хорошей идеей всегда передавать ссылки для больших выходных значений.

Поэтому я должен передать ссылки, чтобы избежать копирования, или есть какой-нибудь способ узнать, оптимизирует ли компилятор копию?

Кроме того, стоит ли попытаться выяснить, будет ли компилятор оптимизировать определенным образом на самом деле меньше, чем просто передача по ссылке?

0

Решение

Весь смысл статьи в том, чтобы сообщить вам, что вы не стоит беспокоиться об этом. Оптимизация — это черный ящик, который не должен вас волновать, за исключением самых редких ситуаций.

Компилятор выполняет RVO когда он считает RVO применимым.

2

Другие решения

Любой приличный компилятор это поддержит. Просто используйте его, если вы точно не знаете, что вам нужно поддерживать компилятор, который этого не делает.

0

По вопросам рекламы [email protected]