Почему спецификатор const для типа возвращаемого значения не влияет на функции, помеченные __forceinline / inline? - PullRequest
1 голос
/ 13 февраля 2020

Я компилирую свой код C ++ с помощью clang, и мне интересно значение ошибки компилятора:

error : 'const' type qualifier on return type has no effect

Следующий синтаксис генерирует ошибку:

inline const int foo();

__forceinline const bool bar();

Ответы [ 2 ]

4 голосов
/ 13 февраля 2020

На самом деле это предупреждение, которое преобразуется в ошибку переключателем командной строки. Он не связан с inline или __forceinline и довольно понятен.

const и volatile квалификаторы возвращаемых функций, , когда функция возвращается по значению, не имеют смысла, потому что концептуально возвращаемое значение либо отбрасывается, либо используется как временное для инициализации объекта на стороне вызывающей стороны. const / volatile квалификация этого объекта находится в юрисдикции вызывающего абонента. Например, совершенно законно инициализировать непостоянную переменную int из вызова функции, который возвращает const int.

3 голосов
/ 13 февраля 2020

Почему спецификатор const для типа возвращаемого значения не имеет никакого эффекта ...

Поскольку функция возвращает значение типа prvalue. Нет разницы между значениями const и nonconst типа int или bool. Квалификатор имеет значение только для значений типов классов (даже тогда, возвращение значения const было бы весьма нетрадиционным).

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

Очевидно, компилятору было сказано обрабатывать предупреждения как ошибки.

... on функции, помеченные __forceinline / inline?

То же самое относится и к функциям, которые не помечены этими.

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