0

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; }
4

2 回答 2

1

所有这些都在编译时初始化,因此对它们中的任何一个都没有运行时影响。

于 2016-04-02T18:55:01.770 回答
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

所以,没有性能损失......而是灵活性的提高......虽然运算符函数似乎仍然在某些编译器版本中在某些标志下创建......这些值是在编译时初始化的

https://godbolt.org/g/YuJyQd

于 2016-04-02T19:16:38.320 回答