5.15 Логический оператор ИЛИ в стандарте говорит следующее:
В отличие от |, || гарантирует оценку слева направо;
Означает ли это, что где-то, что я не могу найти в стандарте, |
определено для оценки справа налево или что оно определяется реализацией? Это меняется, когда оператор перегружен? Я написал быструю программу для проверки этого, и MSVC ++ и GCC, кажется, оценивают справа налево .
#include<iostream>
using namespace std;
int foo = 7;
class Bar {
public:
Bar& operator|(Bar& other) {
return *this;
}
Bar& operator++() {
foo += 2;
return *this;
}
Bar& operator--() {
foo *= 2;
return *this;
}
};
int main(int argc, char** argv) {
Bar a;
Bar b;
Bar c = ++a | --b;
cout << foo;
}
Это выводит 16
.
Если ++a
и --b
переключены, то выдается 19
.
Я также подумал, что могу столкнуться с множественными изменениями между правилами точек последовательности (и, следовательно, неопределенным поведением), но я не уверен, как / если это применимо к двум отдельным экземплярам в качестве операндов.