Эффективность применения static_cast() к enum class-ам
Имеется enum class и функция, возвращающая данный тип:
enum class A{
a = 0, b, c, d, e // и тд
};
A get_enum(int x){
return static_cast<A>(x);
}
Будет ли как-то влиять на скорость работы обратный каст к инту при проверке результата функции:
for(int x=0; x<5; ++x){
// какая-то работа
if(get_enum(x) == A::c){} // так?
if(static_cast<int>(get_enum(x)) == 2){} // или так?
}
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Давайте проверим. Доработаем пример, чтобы выделить функциональность:
#include <iostream>
enum class A {
a = 0, b, c, d, e // и тд
};
A get_enum(int x) { return static_cast<A>(x); }
bool f(int x) { return get_enum(x) == A::c; }
bool g(int x) { return static_cast<int>(get_enum(x)) == 2; }
int main() {
int x;
std::cin >> x;
std::cout << f(x) << '\n' << g(x) << '\n';
}
Откомпилируем его в ассемблер (-S):
$ g++ -S -std=c++23 -pedantic -Wall -Wextra -Werror -Wwrite-strings -Wconversion temp.cpp
В файле temp.s отыщем код функций f (метка _Z1fi) и g (метка _Z1gi) и сравним их:
f |
g |
|---|---|
|
|
И убедимся что получился один и тот же код. А значит и скорость работы одна и та же.