本篇文章描述一下字面量优化
1.字面量介绍
字面量(Literal)是指在源代码中直接使用的常量值,它们表示了具体的数值、字符、字符串、布尔值等。字面量是程序中固定不变的数据。
以下是几种常见的字面量类型:
- 整数字面量:表示整数值,如
0
、42
、-10
等。- 浮点数字面量:表示带有小数部分的实数值,如
3.14
、-0.5
等。- 字符字面量:用单引号括起来的单个字符,如
'A'
、'x'
等。- 字符串字面量:用双引号括起来的一串字符序列,如
"Hello, World!"
。- 布尔字面量:表示真或假的逻辑值,有两个取值:
true
和false
。- 指针字面量:用于表示空指针,在 C++ 中为
nullptr
。除了上述基本类型的字面量外,C++ 还提供了其他类型的自定义字面量。通过定义自己的后缀操作符函数(Suffix Operator Function),可以使特定形式的字面量具有自定义行为。
上述描述中提到了后缀操作符的函数 后缀操作符是通过采用函数的形式来控制字面量 这样就可以人为的控制字面量了
字面量函数基本语法
return_type operator " " identifier (parmars)
说明 :return_type 返回类型 parmars参数列表
代码实例:
#include <iostream>
// 自定义整数字面量函数
constexpr int operator"" _double(unsigned long long num) {
return num * 2;
}
int main() {
int x = 5_double; // 使用自定义整数字面量函数
std::cout << x << std::endl; // 输出:10
return 0;
}
2.十六进制浮点字面量 std::hexfloat &std::defaultfloat(C++17以后可以直接书写16进制字面量)
作用 hexfloat可以把浮点数常量 16进制
defaultfloat 是将16进制浮点数化为浮点数常量
代码实例:
#include<bits/stdc++.h>
using namespace std;
// 自定义整数字面量函数
int main()
{
double float_array[]{ Ox1.7+2,Ox1.f4+9,0x1.df3b64p-4 };
for (auto elem : float_array)
{
cout << hexfloat << elem<<"="<<defaultfloat<<elem<<endl;
}
return 0;
}
以上代码说明了hexfloat defaultfloat两种形式的相互转化
拓展(了解即可)
16进制浮点数转换为10进制浮点数:
0x1.f4
是一个十六进制浮点数。在IEEE 754浮点表示中,它可以表示为:符号位:0(正数) 指数位:2(偏移后的指数值) 尾数位:f4(二进制小数)
对于尾数部分,将其转换为二进制小数形式,即11110100。
根据规范,浮点数的计算公式为:(-1)^s * (1 + 尾数) * 2^(指数 - 偏移值)
代入具体的值: 符号位 s = 0 (正数) 尾数 f = 1.1110100 指数 e = 2 (偏移后的指数值)
则计算结果为: (-1)^0 * (1 + 1.1110100) * 2^(2 - 偏移值)
偏移值是15(对于双精度浮点),因此得到: (1 + 1.953125) * 2^(-13)
化简得: 3.90625 * 2^(-13)
最终结果约等于: 11.953125 × 10^(-4)
二进制整数字面量:
意思 就是以二进制的方式来表现常量的形式 二进制字面量也是右值的一部分。就是在二进制数值前面加上前缀 0b(0B) 即可 注意不是O
代码实例:
#include <iostream>
int main() {
// 使用0b前缀表示二进制字面量
int binaryNumber = 0b101010;
std::cout << "Binary Number: " << binaryNumber << std::endl;
return 0;
}
//Binary Number: 42
总结:字面量是右值的一部分 由于右值在计算机内存中没有开辟空间储存 所以直接使用操作起来比较难 但是C++17即以上特性新出了一些函数 他们能够较好的使用我们的字面量
好了 本篇文章的内容就到这里 在这里小编想给大家推荐一个课程 喜欢C++的小伙伴可以考虑一下: