Код: Выделить всё
std::array::operator[]
Код: Выделить всё
const
Код: Выделить всё
std::array{1}[0] = 3;
Код: Выделить всё
std::get(std::array{1}) = 3;
Выражение невозможно назначить [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::get являются синонимами".
Подробнее здесь: https://stackoverflow.com/questions/786 ... -rvalue-ob