Я знал, что if else
может сгенерировать остановка конвейера (пузырь) , потому что предсказатель Ветвления не может продолжать правильно угадывать 100%. Одним словом, у многих if elif elif ... else
плохая производительность.
В шаблоне C ++ у нас есть SFINAE . С SFINAE мы можем избежать кода if else
. Например, чтобы проверить, является ли int нечетным или нет, мы можем кодировать как показано ниже:
template <int I> void div(char(*)[I % 2 == 0] = 0) {
// this overload is selected when I is even
}
template <int I> void div(char(*)[I % 2 == 1] = 0) {
// this overload is selected when I is odd
}
чтобы мы избегали
if (I % 2 == 0)
{
// do things
}
else
{
// do other things
}
Мой вопрос: у SFINAE лучшая производительность по сравнению с if else
? СФИНАЕ может избежать пузыря трубопровода?