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

生成されたアセンブリから見てみましょう...このツールを使用して: 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 に答える
1

これらはすべてコンパイル時に初期化されるため、ランタイムへの影響はありません。

于 2016-04-02T18:55:01.770 に答える