Почему GCC говорит «именованные возвращаемые значения больше не поддерживаются»? - PullRequest
37 голосов
/ 22 ноября 2010

Я случайно поставил открывающую скобку в своем определении функции после оператора return

int id(int k) return k; { }

Но GCC ответил странным сообщением об ошибке

ошибка: именованные возвращаемые значения больше не поддерживаются

Может кто-нибудь объяснить, что это за странная особенность? Я никогда не слышал об этом.

Ответы [ 3 ]

39 голосов
/ 22 ноября 2010

См. здесь - ранняя реализация NRVO путем явного определения именованного возвращаемого значения в заголовке функции.

Была добавлена ​​собственная поддержка NRVO без этого расширения здесь - Серия GCC 3.1 Release.

Краткое описание и вставка для контекста:

G ++ теперь поддерживает «оптимизацию именованных возвращаемых значений»: для кода, подобного

A f () {
  A a;
  ...
  return a;
}

G ++ будет размещать в слоте возвращаемого значения, так что возвращаемое значение становится неактивным.Чтобы это работало, все операторы возврата в функции должны возвращать одну и ту же переменную.

4 голосов
/ 22 ноября 2010
2 голосов
/ 22 ноября 2010

Это было расширение GCC , удалено в GCC 3.4 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...