2016-04-02 10 views
0

1) çalışma süresinde diğerinden daha hızlı mı? hangi ve neden?
2) bu derleme zamanı veya çalışma zamanında mı gerçekleşir?, C++ 11 kullanıcı tanımlı hazırlıklar normal türden dökümden daha yavaş mı?

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 

düzenleme:constexpr yardım o kullanıyor mu?

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

cevap

1

bize oluşturulan meclisleri dan görelim ... Bu aracı kullanarak (modifiye hazırlamak için önce kodu) Bu girişi için

,

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 

oluşturulan derleme hiçbir yoktur, Yani

my_var: 
     .byte 20      # 0x14 

my_var2: 
     .byte 52      # 0x34 

my_var3: 
     .byte 52      # 0x34 

olduğunu operatör fonksiyonu hala belli bayrakları altında belli derleyici sürümlerinde oluşturulan gibi görünüyor olsa performans isabet ... esneklik oldukça bir kazanç .... .... değerleri derleme zamanında başlatılır

https://godbolt.org/g/YuJyQd

+0

teşekkürler, çok açıklayıcı. – Anon

1

Bunların tümü derleme zamanında başlatılır ve bu nedenle bunlardan herhangi birine çalışma zamanı etkisi yoktur. https://gcc.godbolt.org

clang tarafından üretilen düzenek olan: