Тернарный оператор?: Против если ... еще - PullRequest
65 голосов
/ 25 августа 2010

В C ++ оператор?: Быстрее, чем оператор if () ... else?Есть ли различия между ними в скомпилированном коде?

Ответы [ 14 ]

0 голосов
/ 25 августа 2010

В C Тернарный оператор "?:" Доступен для построения условных выражений вида

exp1 ? exp2:exp3

где exp1, exp2 и exp3 - выражения

для примера

        a=20;
        b=25;
        x=(a>b)?a:b;

        in the above example x value will be assigned to b;

Это можно записать с помощью if..else следующим образом:

            if (a>b)
             x=a;
             else
             x=b;

** Следовательно, нет никакой разницы между этими двумя. Это для программиста, чтобы написать легко, но для компилятора оба одинаковы. *

0 голосов
/ 25 августа 2010

Я ожидаю, что на большинстве компиляторов и целевых платформ будут случаи, когда «если» быстрее, а случаи, где?: Быстрее.Также будут случаи, когда одна форма более или менее компактна, чем другая.В каких случаях предпочтение отдается той или иной форме, зависит от компиляторов и платформ.Если вы пишете критичный к производительности код на встроенном микро, посмотрите, что компилятор генерирует в каждом случае, и посмотрите, что лучше.На «массовом» ПК из-за проблем с кэшированием единственный способ увидеть, что лучше, - сравнить обе формы в чем-то, напоминающем реальное приложение.

0 голосов
/ 25 августа 2010

Теперь я не могу помочь вам с этим, возможно, я смогу помочь с дополнительным вопросом под ним, хочу ли я его использовать?Если вы просто хотите узнать о скорости, просто проигнорируйте мой комментарий.

Все, что я могу сказать, это, пожалуйста, быть очень умным, когда использовать троичный?: оператор.Это может быть как благословение, так и проклятие для читабельности.

Спросите себя, не находите ли вы, что вам легче читать перед тем, как его использовать

int x = x == 1 ? x = 1 : x = 1;

if (x == 1)
{
   x = 1
}
else
{
   x = 2
}

if (x == 1)
    x = 1
else
    x = 1

Да Выглядит глупо, чтобы код был на 100% поддельным.Но этот маленький трюк помог мне проанализировать читаемость кода.Это удобочитаемость оператора, который вы смотрите в этом примере, а не содержание.

Это выглядит чистым, как и обычное сиденье унитаза и дверная ручка

В моем ограниченном опыте я видел, что очень мало людей действительно способны быстро выдавать информацию, требуемую от троичнойоператор, избегайте, если на 100% не уверены, что это лучше.Я думаю, что боль исправляется, когда она прослушивается.

0 голосов
/ 25 августа 2010

Нет, они конвертируются в один и тот же исполняемый код.

...