Reference:
1. 字面量
在C++中,字面量(Literal)是表示固定值的语法元素。它们是程序中的常量值,直接出现在代码中,不需要进行计算或求值。C++支持多种类型的字面量,包括整数、浮点数、字符、字符串和布尔值。
下面是几种常见的C++字面量类型:
- 整数字面量(Integer Literals):用于表示整数值。可以使用十进制、八进制、十六进制或二进制表示法。例如:
42,0xFF,0755,0b1010; - 浮点数字面量(Floating-point Literals):用于表示浮点数值。可以使用十进制或科学计数法表示法。例如:
3.14,2.0e-5; - 字符字面量(Character Literals):用于表示单个字符值。使用单引号括起来。例如:
A,x,\n。 - 字符串字面量(String Literals):用于表示字符串值。使用双引号括起来。例如:
Hello, World!,OpenAI,42; - 布尔字面量(Boolean Literals):用于表示布尔值,即
true或false; - 空指针字面量(Null Pointer Literals):用于表示空指针值。使用关键字
nullptr表示。
这些字面量可以直接在代码中使用,并具有与其类型相对应的值和语义。它们提供了一种直观和方便的方式来表示常量值,并在编程中广泛使用。
2. 字面量运算符
C++11 提供了一种创建用户自定义字面量的机制:字面量运算符(User-defined Literal Operator)。
概念:
- 形如
T operator"" name(T1, T2),其中 name 是用户自定义的后缀,例如unsigned int operator“” _t(const char*s, size_t l),用的话这样使用"123"_t。一般建议后缀开头是下划线。如果不加下划线也能使用,但是会报以下Warning:

2. 字面量重载运算符可以把字面值常量(注意只能是字面值常量,也就是“123”,123,1.23,‘a’这样,不能是变量),转化为需要的类型对象。
3. 使用要点
根据字面值类型的不同,操作符函数可以接受的参数也是不一样的。
- 字面值是整数:操作符只能接受
unsigned long long作为参数; - 字面量为浮点数:操作符函数只可接受
long double为参数; - 字面量为字符串:操作符函数只可接受
const char*、size_t为参数; - 字面量为字符:则操作符函数只接受一个
char为参数。
4. 示例
1. 字面值是整数
int operator"" _n(unsigned long long i){
return i / 10;
}
void test_n(){
int a = -21474836470_n;
cout << a << endl;
}
这样不会出现溢出。
2. 字面量为浮点数
double operator"" _f(long double i){
return i / 10;
}
void test_f(){
double a = -214748.36470_f;
cout << a << endl;
}
3. 字面量为字符串
unsigned int operator"" _s(const char*s, size_t l){
cout << "s = " << s << endl << "l = " << l << endl;
return l;
}
void test_s(){
unsigned int a = "12346"_s;
cout << a << endl;
}
4. 字面量为字符
int operator"" _c(char c){
return c;
}
void test_c(){
cout << 'a'_c << ", " << 'A'_c << endl;
}
5. 比较好用的一个场景
inline std::chrono::microseconds operator"" _us(unsigned long long time_) { return std::chrono::microseconds(time_); }
---
std::this_thread::sleep_for(5000_us);
在/usr/include/c++/9/chrono里面就是这样写的,写法如下:
template <char... _Digits>
constexpr chrono::microseconds
operator""us()
{ return __check_overflow<chrono::microseconds, _Digits...>(); }
C++11引入了字面量运算符,允许用户自定义字面量后缀,将字面量转换为特定类型。例如,可以创建一个将字面量转换为微秒的运算符,便于时间间隔的表示。文章列举了不同类型的字面量(整数、浮点数、字符串、字符),并提供了相应的运算符示例,如_int、_f、_s和_c,展示了如何重载这些运算符处理字面量。
444

被折叠的 条评论
为什么被折叠?



