Ключевое слово 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 на почти любые функции. Если он неприменим, то просто тихо игнорируется.