1)这些中的任何一个在运行时都比另一个更快吗?哪个以及为什么? 2)这是在编译时还是在运行时发生的?
unsigned short operator"" _ushort( unsigned long long arg ){ return arg; }
unsigned short my_var = 0x1234; // using type and literal
auto my_var = unsigned short(0x1234); // using auto and casting literal to type
auto my_var = 0x1234_ushort; // using auto and user defined literal to cast
编辑确实使用 constexpr 帮助吗?
constexpr unsigned short operator"" _ushort( unsigned long long arg ){ return arg; }
答案 0 :(得分:1)
所有这些都在编译时初始化,因此对它们中的任何一个都没有运行时影响。
答案 1 :(得分:1)
让我们从生成的程序集中看到......使用此工具:https://gcc.godbolt.org
clang生成的程序集是:(修改代码以进行编译)
对于此输入,
inline unsigned char operator "" _kx ( unsigned long long arg ){ return arg; }
unsigned char my_var = 0x14; // using type and literal
auto my_var2 = (unsigned char) 0x1234; // using auto and casting literal to type
auto my_var3 = 0x1234_kx; // using auto and user defined literal to cast
生成的程序集是
my_var:
.byte 20 # 0x14
my_var2:
.byte 52 # 0x34
my_var3:
.byte 52 # 0x34
所以,没有性能打击......而是灵活性的增加...... 虽然在某些标志下某些编译器版本仍然可以创建运算符函数....这些值在编译时初始化