Я читал довольно много в Интернете, и, похоже, многие люди упомянули следующие правила (но я не мог найти его в стандарте),
Оператор сложения + (и все остальные двоичные операторы) требует, чтобы оба операнда были rvalue, а результат - rvalue. И так далее.
Я проверил стандарт С++, и он ясно заявляет, что (пункт 3.10/2),
Всякий раз, когда glvalue появляется в контекст, в котором ожидается prvalue, glvalue преобразуется в prvalue
(п. 5/9),
Всякий раз, когда появляется выражение glvalue как операнд оператора, который ожидает значение для этого операнда, lvalue-to-rvalue (4.1), array-to-pointer (4.2) или стандарт функции-to-pointer (4.3) конверсии применяются для преобразования выражение в prvalue.
Он использует термин, который операнд "ожидает" prvalue. Однако, когда я смотрю на оператор добавок, оператор умножения и т.д., Он только упоминает, что результат - это значение 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. Для большинства операторов стандарт ссылается только на результат, но не на требование операнда.
Спасибо.
Btw, я нашел в Стандарте 5.19 относительно постоянного выражения, может очень "неявно" подразумевать, что бинарный оператор требует преобразования lvalue-to-rval в операндах. Для получения более подробной информации, пожалуйста, обратитесь к моему предыдущему вопросу,
смешивание использования constexpr и const?
условное выражение является константой если оно не связано с одним из следующее как потенциально оценивается подвыражение (3.2).
...
- преобразование lvalue-to-rvalue (4.1) если оно не применяется к
---- значение gl интегральный или перечисляемый тип, который относится к энергонезависимому объекту const с предыдущей инициализацией, инициализируется постоянным выражением
Спасибо за чтение.