在C++中,数字表达提供了一系列的后缀进行表示,如下:
u或U 表示数字是无符号整型数,如:123u,但并不说明是长整型还是短整型
u或U 表示数字是无符号整型数,如:123u,但并不说明是长整型还是短整型
l或L 表示数字是长整型数,如:123l;而123ul就是无符号长整型数;而34.4l就是长双精度浮点数,等效于双精度浮点数
i64或I64 表示数字是长长整型数,其是为64位操作系统定义的,长度比长整型数长。如:43i64
f或F 表示数字是单精度浮点数,如:12.3f
e或E 表示数字的次幂,如:34.4e-2就是0.344;0.2544e3f表示一个单精度浮点数,值为254.4
这种数值后缀的方法怎么样自定义呢?例如本人想定义一个HL代表长整数类型,如:234567890876534895682756HL,代表一个长整数类型,问一下该怎么样实现这个自定义呢?
解决方案
15
C++11 的 User-defined literals
25
///要求 ReturnType 定义了+,* 等运算符
constexpr ReturnType operator “”HL(const char* s){
Returntyoe r(0);
int sgn =1;
if(*s==”+” ){s++;sgn=1;}
else (s==”-“){s++;sgn=-1;}
while(*s){
r*=10;
r+=*s-“0”
s++; ;
}
return r*sgn;
}
constexpr ReturnType operator “”HL(const char* s){
Returntyoe r(0);
int sgn =1;
if(*s==”+” ){s++;sgn=1;}
else (s==”-“){s++;sgn=-1;}
while(*s){
r*=10;
r+=*s-“0”
s++; ;
}
return r*sgn;
}