Ключевое слово const в возвращаемом значении
MSVC позволяет декларировать тип возвращаемого значения функции c использованием ключевого слова const
. Учитывая, что такой реализации не предусмотрено в документации MS C++ (возможно в синтаксисе она и присутствует, но я еще не на той стадии, чтобы понимать что в этой графе описывается), ожидается, что const
в данном случае будет реализовывать функционал constexpr
.
const int F() {
int value;
std::cin >> value;
return value;
}
Однако и вышеупомянутый написанный код успешно компилируется. Что происходит в данном примере? Кажется, использование const в данном примере бесполезно, хоть IDE и видит идентификатор F как const int.
Ответы (1 шт):
Стандарт говорит, что prvalue (т.е., грубо говоря, временные объекты), тип которых - не класс и не массив, автоматически теряют const
и volatile
. Поэтому в вашем случае const
ничего не делает.
А если возвращать из функции класс, то const
вреден, потому что константный временный объект нельзя переместить, и он вместо этого будет втихую копироваться.
ожидается, что const в данном случае будет реализовывать функционал constexpr
Нет, это так не работает.
Однако и вышеупомянутый написанный код успешно компилируется.
А он даже с constexpr
теперь компилируется, потому что в С++23 разрешили навешивать constexpr
на почти любые функции. Если он неприменим, то просто тихо игнорируется.