C++新特性 字面量优化

本篇文章描述一下字面量优化

1.字面量介绍

字面量(Literal)是指在源代码中直接使用的常量值,它们表示了具体的数值、字符、字符串、布尔值等。字面量是程序中固定不变的数据。

以下是几种常见的字面量类型:

  1. 整数字面量:表示整数值,如 042-10 等。
  2. 浮点数字面量:表示带有小数部分的实数值,如 3.14-0.5 等。
  3. 字符字面量:用单引号括起来的单个字符,如 'A''x' 等。
  4. 字符串字面量:用双引号括起来的一串字符序列,如 "Hello, World!"
  5. 布尔字面量:表示真或假的逻辑值,有两个取值:true 和 false
  6. 指针字面量:用于表示空指针,在 C++ 中为 nullptr

除了上述基本类型的字面量外,C++ 还提供了其他类型的自定义字面量。通过定义自己的后缀操作符函数(Suffix Operator Function),可以使特定形式的字面量具有自定义行为

上述描述中提到了后缀操作符的函数  后缀操作符是通过采用函数的形式来控制字面量 这样就可以人为的控制字面量了

字面量函数基本语法 

return_type operator  " "  identifier (parmars)

说明 :return_type 返回类型 parmars参数列表

代码实例:

#include 

// 自定义整数字面量函数
constexpr int operator"" _double(int 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
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<<"="<

以上代码说明了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 

int main() {
    // 使用0b前缀表示二进制字面量
    int binaryNumber = 0b101010;
    
    std::cout << "Binary Number: " << binaryNumber << std::endl;
    
    return 0;
}
//Binary Number: 42

总结:字面量是右值的一部分 由于右值在计算机内存中没有开辟空间储存 所以直接使用操作起来比较难 但是C++17即以上特性新出了一些函数 他们能够较好的使用我们的字面量     

好了 本篇文章的内容就到这里 在这里小编想给大家推荐一个课程 喜欢C++的小伙伴可以考虑一下:

https://xxetb.xetslk.com/s/2PjJ3T

你可能感兴趣的:(C++,新特性,c++,开发语言)