Некоторые операторы, такие как &&
и ||
выполняют оценку короткого замыкания. Кроме того, когда функция вызывается с аргументами, все аргументы строятся до вызова функции.Как реализовать оценку короткого замыкания в пользовательских функциях?
Например, возьмем следующие три функции
bool f1();
bool f2();
bool f3(bool, bool);
, если я позвоню
if(f3(f2(),f1()))//Do something
Тогда возвращаемое значение как f2
и f1
вычисляются до f3
называется. Но, если бы я использовал (регулярное) operator||
вместо f3
, чем приведенный выше код будет эквивалентен
if(f2()||f1())//Do something
и f1
не будет оцениваться, если f2
оценивается как истина.
Мой вопрос: Возможно ли, что f3
(определенная пользователем функция с двумя булевыми) ведет себя одинаково? Если нет, что делает operator||
особенным?
Возможно, если вы включите его ... в противном случае, абсолютно нет. –