2016-04-02 4 views
0

1) ist einer dieser schneller als der andere zur Laufzeit? was und warum?
2) tritt dies zur Kompilierzeit oder Laufzeit auf?sind C++ 11 benutzerdefinierte Literale langsamer als normales Casting?

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 

edit: tut mit constexpr Hilfe es?

constexpr unsigned short operator"" _ushort(unsigned long long arg){ return arg; } 

Antwort

1

Lassen Sie uns aus den erzeugten Baugruppen sehen ... mit diesem Tool: https://gcc.godbolt.org

Die Montage von Klirren hergestellt ist: (modifizierte Code zu kompilieren)

Für diesen Eingang

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 

Die Baugruppe erzeugte

my_var: 
     .byte 20      # 0x14 

my_var2: 
     .byte 52      # 0x34 

my_var3: 
     .byte 52      # 0x34 

So gibt es keine Leistungseinbußen ... eher ein Gewinn an Flexibilität .... Obwohl die Operatorfunktion noch in bestimmten Compiler-Versionen unter bestimmten Flags erstellt zu sein scheint .... Die Werte werden zum Zeitpunkt der Kompilierung

https://godbolt.org/g/YuJyQd

initialisiert
+0

danke, sehr illustrativ. – Anon

1

Alle diese werden bei der Kompilierung initialisiert, und somit gibt es keine Laufzeit Auswirkungen auf eine von ihnen.

Verwandte Themen