C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C/C++之字面量详解

C/C++之字面量详解(代码中的固定值,用于表示各种数据类型的常量)

作者:MzKyle

C++字面量是直接表示常量的固定值,涵盖整型、浮点、字符、字符串、布尔、指针等类型,支持多进制、后缀及转义,用户定义字面量(C++11+)提供自定义解析方式,类型推导自动确定类型以避免隐式转换和溢出问题

在C++中,字面量(Literal) 是直接出现在代码中的固定值,用于表示各种数据类型的常量。它们可以是数字、字符、字符串、布尔值或特殊类型的值。

1. 整型字面量(Integer Literals)

用于表示整数,支持多种进制和类型后缀:

进制表示

类型后缀

示例

int decimal = 42;       // 十进制
int octal = 012;        // 八进制,等于十进制10
int hex = 0xFF;         // 十六进制,等于十进制255
int binary = 0b1010;    // 二进制,等于十进制10
unsigned long large = 1234567890UL;  // unsigned long类型

2. 浮点型字面量(Floating-Point Literals)

用于表示小数,支持两种表示方式和类型后缀:

表示方式

类型后缀

示例

double pi = 3.14;       // double类型
float pi_f = 3.14F;     // float类型
long double big = 1.23e100L;  // long double类型

3. 字符字面量(Character Literals)

用于表示单个字符,用单引号 ' 包围:

Unicode字符(C++11+):

示例

char c = 'A';           // 普通字符
char newline = '\n';    // 换行符
char16_t euro = u'€';   // UTF-16编码的欧元符号

4. 字符串字面量(String Literals)

用于表示文本,用双引号 " 包围:

Unicode字符串

示例

const char* str = "Hello";           // 普通字符串
const char* path = R"(C:\Users\Doc)"; // 原始字符串
const char16_t* utf16 = u"你好";      // UTF-16编码的字符串

5. 布尔字面量(Boolean Literals)

表示逻辑值,只有两个:

示例

bool isReady = true;
bool isValid = false;

6. 指针字面量(Pointer Literals)

表示空指针:

示例

int* ptr = nullptr;  // C++11及以后推荐使用nullptr

7. 用户定义字面量(User-Defined Literals, C++11+)

允许自定义字面量的解析方式,通过重载后缀运算符实现。标准库中也有一些预定义的UDL,例如:

示例

#include <iostream>
#include <string>

using namespace std::literals;

int main() {
    auto str = "hello"s;  // std::string类型
    auto duration = 2h + 30min;  // std::chrono::duration类型
    std::cout << str.length() << std::endl;
    return 0;
}

8. 字面量的类型推导

编译器会根据字面量的形式和后缀自动推导其类型:

字面量是C++中表示常量值的基本方式,不同类型的字面量有不同的语法和用途。

理解字面量的类型和后缀有助于避免隐式类型转换和溢出问题,尤其是在处理大数或高精度计算时。

用户定义字面量则提供了强大的扩展能力,使代码更具表达力。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文