Я читал довольно много в Интернете, и, похоже, многие упоминали следующие правила (но я не смог найти их в стандарте),
Оператор сложения + (и все другие бинарные операторы) требует, чтобы оба операнда были rvalue, а результат - rvalue.
И так далее ..
Я проверил стандарт C ++, и в нем четко указано, что (пункт 3.10 / 2),
Всякий раз, когда в
контекст, в котором ожидается prvalue,
glvalue преобразуется в prvalue
(пункт 5/9),
Всякий раз, когда появляется выражение glvalue
как операнд оператора, который
ожидает значение для этого операнда,
lvalue-to-rvalue (4.1),
массив-указатель (4.2) или
стандартная функция-указатель (4.3)
преобразования применяются для преобразования
выражение в prvalue.
Используется термин, операнд "ожидает" значения. Однако, когда я смотрю на оператор сложения, оператор умножения и т. Д., В нем только упоминается, что результат является предварительным значением, но ничего не говорится о том, какими «ожидаемыми» будут операнды.
Действительно ли двоичный оператор ожидает, что операнды будут prvalue, имеет значение в следующем случае,
int b = 2;
int a = b + 1;
Если b, как ожидается, будет prvalue, здесь будет преобразование lvalue в rvalue, а затем он выполнит prvalue + prvalue и вернет prvalue, а результат prvalue будет присвоен lvalue a.
Однако, если b не требуется быть prvalue, это будет lvalue + prvalue, а результатом будет prvalue.
Я действительно хочу знать, где в стандарте прямо или косвенно упоминается, что
правила для разных операторов? Я проверяю все разделы операторов и только несколько операторов, которые в стандартах прямо упоминают, должны ли операнды и результаты быть lvalue или rvalue. Для большинства операторов в стандарте упоминается только результат, но не требование операнда.
Спасибо.
Кстати, я обнаружил в Стандарте 5.19, что константное выражение может очень и очень «неявно» означать, что двоичный оператор требует преобразования lvalue в rvalue для операндов. Для более подробной информации, пожалуйста, обратитесь к моему предыдущему вопросу,
смешивание использования constexpr и const?
Условное выражение - это константа
выражение, если оно не связано с одним из
следующее как потенциально
вычисленное подвыражение (3.2).
...
- преобразование lvalue в rvalue (4.1)
если только он не применяется к
————
целочисленный тип или тип перечисления,
относится к энергонезависимому константному объекту
с предшествующей инициализацией,
инициализируется постоянным выражением
Спасибо за чтение.