Почему оператор std::array[] не сохраняет категорию значений массива?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему оператор std::array[] не сохраняет категорию значений массива?

Сообщение Anonymous »

Я ожидал, что если std::array является rvalue, то вызов оператора[] также вернет rvalue. Но, похоже, это не так (cppreference), нет перегрузок категорий значений.
Например, std::optional учитывает категорию значений (cppreference ). Почему у нас нет таких же перегрузок в std::array, как здесь?
const T &&operator[](size_type pos) const &&
const T &operator[](size_type pos) const &
T &&operator[](size_type pos) &&
T &operator[](size_type pos) &

(конечно, этот вопрос касается не только оператора[], но и всех остальных функций доступа)

Вот пример, показывающий, что в этом отношении std::array не является полной заменой массивов старого стиля. В случае массивов старого стиля результатом оператора индекса является ссылка на rvalue, но в случае с std::array это не так:
#include
#include
#include
#include

int main() {
int old_way[1];
std::array new_way;

printf("old_way, is_rvalue_reference: %d\n", std::is_rvalue_reference_v);
printf("new_way, is_rvalue_reference: %d\n", std::is_rvalue_reference_v);
}

Эта программа печатает:
old_way, is_rvalue_reference: 1
new_way, is_rvalue_reference: 0


Подробнее здесь: https://stackoverflow.com/questions/791 ... -the-array
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»