Здравствуйте, drx, Вы писали:
drx>Здравствуйте, Axc, Вы писали:
drx>>> T* const result = q == p ? p : q;
Axc>>Я чего-то не того. result = q?
drx>Нет.
drx>Это выражение компилится так, как будто бы оно выглядело следующим образом:
drx>drx>T* const result = ((q == p) ? p : q);
drx>
drx>RTFM, вобщем. Боюсь, что придётся копаться в грамматике языка, т.к. AFAIR Страсутруп в своей книге не стал объяснять подобный случай, а сразу отослал к грамматике.
Хорошо, перепишем:
T* const result;
if(q==p) result=p;
else result=q;
drx>Ну или просто попробуй скомпилировать и запустить
drx>drx>int i = 0 == 1 ? 2 : 3;
drx>std::cout << i;
drx>
Обманываете, батенька!
Если быть до конца честным, должно быть:
//считаем что p=2
//случай q=2
int i = 2 == 2 ? 2 : 2;
std::cout << i;
//случай q=3
int j = 3==2? 2 : 3;
std::cout << j;
В обоих случаях выведет "значение q" (2 когда q=p=2, 3 когда q=3).
И зачем огород городить?