Какой формат лучше с точки зрения скорости, производительности и размера машинного кода?
Прошлой return
инкапсулируется:
static bool MyClass::IsEqual(int A, int B)
{
if (A == B)
{
return true;
}
else
{
return false;
}
}
Прошлой return
не инкапсулируется:
static bool MyClass::IsEqual(int A, int B)
{
if (A == B)
{
return true;
}
return false;
}
Какой формат лучше с точки зрения скорости, производительности и размера машинного кода?
Все они должны быть идентичными или близкими к нему. Более того, вы задали не тот вопрос.
Лучший вопрос был бы,
Что мне лучше и почему?
Имейте в виду, что код C ++ предназначен для чтения люди, не машины. Исходя из этого, основным мотивом выбора одного стиля кодирования над другим должно быть то, насколько он удобен для восприятия человеком. Как бы ни были важны эти соображения, к сожалению, они также субъективны. Суть в том, что вы должны решить для себя, что лучше, но важно то, что вы задаете правильные вопросы по правильным причинам и обдумываете ответ.
Чтобы ответить на ваш вопрос — сгенерируйте и посмотрите код ассемблера. Бьюсь об заклад, код ассемблера идентичен — так что нет разницы в производительности.
Я всегда удаляю if/else
если возможно, учитывая ваш пример, я бы сделал:
static bool MyClass::IsEqual(int A, int B)
{
return (A == B);
}
Но я знаю, что примеры из реальной жизни не так просты, как этот.
Оба фрагмента кода должны давать один и тот же результат, так что это не аргумент ни для одного из них.
Что действительно решает, какую версию использовать, так это стиль кодирования. if
/else
Вариант имеет то преимущество, что обе ветви находятся на одном логическом уровне. Иногда это может быть хорошей причиной, чтобы написать это так.
Вторая форма немного более удобочитаема, поскольку снижает уровень вложенности. Нет абсолютно никакого снижения производительности за использование той или иной формы.