Производительность: else if vs if в функции, которая уже вернула

avatar
philips_dvd
8 апреля 2018 в 00:42
62
1
1

Есть ли разница в производительности между использованием else if / if в функции, которая что-то возвращает? Я имею в виду, что если функция уже возвращена, она все равно не выполнит следующую, если, в чем цель else if, верно? Я написал небольшой фрагмент кода, чтобы проиллюстрировать, что

#include <iostream>

bool foo(int x)
{
if (x == 3) return 1;
else if (x == 4) return 1; //using only if here has the performance of else if?
return 0;
}

int main()
{
int x = 4;
std::cout << foo(x);
std::cin.get();
return 0;
}
Источник
HolyBlackCat
8 апреля 2018 в 00:44
4

Никакой разницы на любом здравомыслящем компиляторе. Посмотрите на получившуюся сборку по адресу gcc.godbolt.org, чтобы быть уверенным.

miradulo
8 апреля 2018 в 00:46
1

Они будут генерировать идентичные сборки с некоторым уровнем оптимизации на современном компиляторе. else является избыточным ИМХО.

Peter
8 апреля 2018 в 01:21
1

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

Jive Dadson
8 апреля 2018 в 02:56
0

@Peter - ... или инженер по запутыванию кода.

Ответы (1)

avatar
apramc
8 апреля 2018 в 03:40
0

Все должно быть одинаковым, один из способов проверить производительность — сравнить ваш ассемблерный код, вы можете использовать такие инструменты, как godbolt.org, обычно код, который генерирует меньше инструкций, работает быстрее.

кстати, будет лучше, если вы сравните "возврат 0" перед двумя другими случаями, так как почти в 100% случаев ваш входной аргумент не равен 3 или 4,

if (x != 3) return 0;
return 1;

намного лучше, чем

if (x == 3) return 1; 
return 0;
Peter
8 апреля 2018 в 03:49
0

Возврат if x != 3 first даст другое поведение для кода OP, если x == 4 (который возвращает 1, если x представляет собой эфир из двух значений).