170 похожих чатов

Друзья, а кто-то может, пожа-а, объяяснить разницу между [1] и

[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]) этого не требует....

1 ответов

3 просмотра

If это оператор. ? : это выражение, У if нет типа, у выражения должен быть тип данных

Похожие вопросы

Обсуждают сегодня

вот такое это из хаскеловской или никсовой ситуации ? пока мне сложно отличить, может кто понимает last 10 log lines: > Running phase: updateAutotoolsGnuConfig...
Fedor
18
Снова я с выводом номера вхождения подстроки в строку. Исправил код, номер элемента, с которого начинается подстрока в строке, выводит, но неправильно. Подскажите, пожалуйста,...
Ыиу
2
получается, что он находит одинаковое колво тегов, с разными именами, или я что тто не понял в таксоупе ?
Fedor
32
@dt0W3s1yQE75Mew ну чё как чувствуешь себя здесь бот? запомни тупое ты чучело - в ассемблере нету тянок
.
18
#include <stdio.h> base( int size_2, int size_1, int ar_1[], int ar_2[][size_2] ){ int cm,im; int ar_3[size_2]; for(int num = 0; num <size_2; num++ ) { ...
Behemoth cat
11
а вот так если по инструкции выше Y % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total ...
Fedor
7
Вопрос, не ставиться haskus-utils-variant (>=3.3 && <3.4) - говорит битый пакет под никсом, есть у кого мысли как чинить ?
Fedor
16
Доброго времени! Есть ли в Lazarus заклинания повышающие точность double? function Distance( constref pt0,pt1:TDVec2 ):double; var cp,st:TDVec2; sin_sr1,sin_sr2, ...
Александр Смоляков
3
ого, прикольно, а что пишешь?
CodWiz | Серёжа by CodWiz
32
Окей, только слишком строго не судите плиз. Есть вэбка, на старом сервере, нужно ее обновить, создали сервер и теперь нужно поднять ис, но не понятно как это сделать по шагов...
Арайка
6
Карта сайта