Я понимаю, что когда я вызываю такую функцию, как
a(b(),c());
тогда поведение этого может быть неопределенным в <= С++ 14 и неопределенным в> = С++ 17 в том смысле, что компилятору решать, следует ли сначала вычислять b
или c
.
Я хотел бы знать лучший способ навязать порядок оценки. Я буду компилировать как С++ 14.
То, что сразу приходит на ум, выглядит примерно так:
#include <iostream>
int count = 5;
auto increment(){
return count++;
}
template <typename A, typename B>
auto diff(A && a, B && b){
return a - b;
}
int main() {
auto && a = increment();
auto && b = increment();
auto c = diff(a,b);
}
Я нахожусь в неопределенном поведении земли? Или это, как предполагается, "заставить" порядок оценки?