Сохраняются ли присвоения результату условных выражений, в которых второй и третий операнды являются переменными одного типа и категории значений?

Узнав о категориях значений, я обнаружил, что следующий фрагмент скомпилирован и работает очень хорошо:

#include <iostream>

int main() {
int x = 1;
int y = 2;
(true ? x : y) = 4;
std::cout << x << std::endl;
}

Вот вывод:

4

Сначала я проверил, было ли это утверждение допустимым в C ++, и я считаю, что это из-за следующего:

N4296 5.16.4 Условный оператор [expr.cond]

Если второй и третий операнды являются значениями одного и того же значения
категории и имеют одинаковый тип, результат этого типа и значения
категория, и это битовое поле, если второй или третий операнд является
битовое поле, или если оба поля битовые.

Учитывая, что оба x а также y являются lvalue (и, следовательно, glvalues), результатом условного выражения в обоих случаях является lvalue. Исходя из этого, выражение кажется верным. Однако не ясно, должно ли это иметь какой-либо эффект.

Причина, по которой я не уверен, должны ли условные операторы иметь эффект, заключается в том, что тип второго и третьего типов операндов int, Даже если этот результат int это lvalue, это не значит, что это должно относиться к x или же y, По сути, это может быть фиктивная переменная, которая не даст никакого эффекта, и будет соответствовать стандарту. Другими словами, я не вижу оснований для этого int& а не отдельный int,

Мой вопрос …

Это поведение правильно и почему?


Я посмотрел на этот вопрос заранее, но не верьте, что это отвечает на мой вопрос. Ответы на этот вопрос относятся к более старому стандарту с другой формулировкой и не отвечают на мой вопрос о том, является ли результат int& в x или нет.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]