[2] в коде:
#include <iostream>
#include <utility> // pair
using namespace std;
pair<int, int> check_pair(const pair<int, int>& p) {
/*[1]*/
//if (p.first * p.second == 0) {
// return { 0,0 };
//}
//return p;
/*[2]*/
return (p.first * p.second == 0) ? pair<int, int> { 0, 0 } : pair<int, int> {p.first, p.second};
// return (p.first * p.second == 0) ? { 0, 0 } : p; // error!
// return (p.first * p.second == 0) ? pair<int, int> { 0, 0 } : p; // good
}
int main() {
pair<int, int> p = {1,2};
cout << check_pair(p).first << ' ' << check_pair(p).second;
return 0;
}
А именно, мне не понятно, почему в случае с тернарным оператором столь странно надо приводить к типу, в то время как стандартный if (случай [1]) этого не требует....
If это оператор. ? : это выражение, У if нет типа, у выражения должен быть тип данных
Обсуждают сегодня