Почему std::array::operator[] не возвращает ссылку rvalue для объекта rvalue?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему std::array::operator[] не возвращает ссылку rvalue для объекта rvalue?

Сообщение Anonymous »

Код: Выделить всё

std::array::operator[]
всегда возвращает ссылку на lvalue ( если необходимо), но какой может быть смысл в использовании такой строки кода, которая допустима для C++?

Код: Выделить всё

std::array{1}[0] = 3;
В конце концов, std::get немного более строгий, потому что если я пишу

Код: Выделить всё

std::get(std::array{1}) = 3;
clang кричит на меня

Выражение невозможно назначить [typecheck_expression_not_modifying_lvalue]

что, кстати, заставляет меня задуматься: "что такое lvalue??"; Я имею в виду, что std::array{1} — это rvalue, а для rvalues ​​std::get возвращает значение по ссылке rvalue, что означает, что он возвращает rvalue.
В любом случае, я понимаю, что такое поведение (operator[]) также влияет на другие контейнеры, например. std::vector, но все же, какая польза от такого поведения, когда эти функции были стандартизированы? И какая польза сегодня от того, чтобы не вносить критические изменения в стандарт, а просто заставить оператор[] вести себя как std::get?
Я так и делаю понимаю, что можно сделать

Код: Выделить всё

auto a = (std::array{1}[0] = 3);
assert(a == 3);
и я могу представить случаи, когда что-то подобное можно сделать с временным std::vector(10, 10), где деструкторы Foos что-то делают, но все же...
Я упускаю что-то более важное?
Кроме ", если они делают то, что вы спросите, тогда оператор[] и std::get являются синонимами".

Подробнее здесь: https://stackoverflow.com/questions/786 ... -rvalue-ob
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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