Мне просто интересно, что делают символы "?" и ":". Я работал над проблемой и столкнулся с ?. Решение показало вопросительный знак, я понятия не имею, что он делает. И что делает оператор :?

return firstNum > secondNum ? vector<int>{secondNum, firstNum}:vector<int>{firstNum, secondNum};
c++
0
Eddy 8 Окт 2019 в 02:10

2 ответа

Это тернарный условный оператор

E1 ? E2 : E3        

Первый операнд условного оператора вычисляется и контекстуально преобразуется в bool. После завершения оценки значения и всех побочных эффектов первого операнда, если результат был истинным, оценивается второй операнд. Если результат был ложным, оценивается третий операнд.

5
Andreas DM 8 Окт 2019 в 02:13
Он в основном похож на оператор if (E1) { E2 } else { E3 }, но более гибкий, поскольку результат оценки может использоваться в других операторах. В этом случае исходный код примерно эквивалентен vector<int> temp; if (firstNum > secondNum) { temp = vector<int>{secondNum, firstNum}; } else { temp = vector<int>{firstNum, secondNum}; } return temp;
 – 
Remy Lebeau
8 Окт 2019 в 02:34

Чтобы добавить к чему @ Andreas DM сказал, что это аналогичная версия написания заявления if-else. В отличие от использования if, он возвращает значение.

if (condition) {
    std::cout << "True\n";
} else {
    std::cout << "False\n";
}

Эквивалентно:

std::cout << (condition ? "True\n" : "False\n");
0
George_E 8 Окт 2019 в 02:44
Это похоже на if-else, но на самом деле это не сокращение для if-else. Ваш пример более точно похож на этот: const char *str; if (condition) { str = "True\n"; } else { str = "False\n"; } std::cout << str;
 – 
Remy Lebeau
8 Окт 2019 в 02:39
Да только синтаксис немного другой. Это больше похоже на то, что if-else на самом деле скорректирует мой ответ.
 – 
George_E
8 Окт 2019 в 02:40
Это тоже не " больше похоже на if-else ". Оператор ?: имеет выходное значение, а if-else - нет.
 – 
Remy Lebeau
8 Окт 2019 в 02:41