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

 更新时间:2025年09月18日 16:51:01   作者:MzKyle  
C++字面量是直接表示常量的固定值,涵盖整型、浮点、字符、字符串、布尔、指针等类型,支持多进制、后缀及转义,用户定义字面量(C++11+)提供自定义解析方式,类型推导自动确定类型以避免隐式转换和溢出问题

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

1. 整型字面量(Integer Literals)

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

进制表示

  • 十进制:普通数字(无前缀),如 42100
  • 八进制:以 0 开头,如 012 表示十进制的 10
  • 十六进制:以 0x0X 开头,如 0xFF 表示十进制的 255
  • 二进制(C++14+):以 0b0B 开头,如 0b1010 表示十进制的 10

类型后缀

  • uUunsigned 类型,如 42U
  • lLlong 类型,如 100L
  • llLLlong long 类型,如 9999999999LL
  • ulULunsigned long 类型,如 1000000UL

示例

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)

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

表示方式

  • 小数形式:如 3.140.5.25(等价于 0.25)。
  • 指数形式:使用 eE 表示科学计数法,如 1.23e5 表示 1.23×10⁵(即 123000)。

类型后缀

  • fFfloat 类型,如 3.14F
  • lLlong double 类型,如 3.14L

示例

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

3. 字符字面量(Character Literals)

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

  • 普通字符:如 'a''0''$'
  • 转义字符:以反斜杠 \ 开头,如 '\n'(换行符)、'\t'(制表符)、'\''(单引号)。

Unicode字符(C++11+):

  • u8'x':UTF-8编码,类型为 char
  • u'x':UTF-16编码,类型为 char16_t
  • U'x':UTF-32编码,类型为 char32_t
  • L'x':宽字符,类型为 wchar_t

示例

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

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

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

  • 普通字符串:如 "Hello""123"
  • 转义字符:与字符字面量相同,如 "Hello\nWorld"
  • 原始字符串(C++11+):用 R"(...)" 表示,无需转义特殊字符,如 R"(C:\path\to\file)"

Unicode字符串

  • u8"text":UTF-8编码,类型为 const char*
  • u"text":UTF-16编码,类型为 const char16_t*
  • U"text":UTF-32编码,类型为 const char32_t*
  • L"text":宽字符,类型为 const wchar_t*

示例

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

5. 布尔字面量(Boolean Literals)

表示逻辑值,只有两个:

  • true:真。
  • false:假。

示例

bool isReady = true;
bool isValid = false;

6. 指针字面量(Pointer Literals)

表示空指针:

  • nullptr(C++11+):类型安全的空指针常量,类型为 std::nullptr_t
  • NULL:传统的空指针宏,通常定义为 0(void*)0

示例

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

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

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

  • 时间单位1h(1小时)、30min(30分钟)、45s(45秒)。
  • 字符串转换"hello"s 表示 std::string 类型(需包含 <string>)。

示例

#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. 字面量的类型推导

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

  • 42:默认 int,若超出 int 范围则为 longlong long
  • 3.14:默认 double
  • 'a'char 类型。
  • "hello"const char[6] 类型(包含终止符 '\0')。

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

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

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

总结

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

相关文章

  • C++异常处理方式实例详解(超级详细!)

    C++异常处理方式实例详解(超级详细!)

    程序有时会遇到运行阶段错误,导致程序无法正常执行下去,c++异常为处理这种情况提供了一种功能强大的而灵活的工具,下面这篇文章主要给大家介绍了关于C++异常处理方式的相关资料,需要的朋友可以参考下
    2023-04-04
  • C++编程中break语句和continue语句的学习教程

    C++编程中break语句和continue语句的学习教程

    这篇文章主要介绍了C++编程中break语句和continue语句的学习教程,break和continue是C++循环控制中的基础语句,需要的朋友可以参考下
    2016-01-01
  • 使用C语言计算长方体的表面积和体积

    使用C语言计算长方体的表面积和体积

    这篇文章主要给大家介绍了关于如何使用C语言计算长方体的表面积和体积的相关资料,在C语言中,我们可以使用乘法运算符(*)来进行乘法运算,并将结果保存在一个变量中,需要的朋友可以参考下
    2023-10-10
  • C++实现趣味扫雷游戏

    C++实现趣味扫雷游戏

    这篇文章主要为大家详细介绍了C++实现趣味扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C语言sqrt函数的实例用法讲解

    C语言sqrt函数的实例用法讲解

    在本篇文章里小编给大家整理的是关于C语言sqrt函数的实例内容以及用法详解,需要的朋友们可以参考下。
    2020-02-02
  • C++ pair方法与vector方法案例详解

    C++ pair方法与vector方法案例详解

    这篇文章主要介绍了C++ pair方法与vector方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • C语言算法练习之数组求素数

    C语言算法练习之数组求素数

    这篇文章主要为大家介绍了C语言算法练习中数组求素数的实现方法,文中的示例代码讲解详细,对我们学习C语言有一定帮助,需要的可以参考一下
    2022-09-09
  • 详解QT使用http通信的同步和异步

    详解QT使用http通信的同步和异步

    在Qt与Http通信的时候,会根据不同的情况使用同步或者异步的方式进行数据请求,下面我们就来深入了解一下http通信的同步和异步的相关知识,感兴趣的小伙伴可以了解下
    2023-12-12
  • C++ 实现读写锁的代码详解

    C++ 实现读写锁的代码详解

    C++读写锁是一种多线程同步机制,它允许多个线程同时读取共享数据,但只允许一个线程写入共享数据,这种锁可以提高程序的并发性和性能,本文给大家介绍了C++ 实现读写锁的代码,需要的朋友可以参考下
    2023-10-10
  • C++ 两个vector对象拼接方式

    C++ 两个vector对象拼接方式

    这篇文章主要介绍了C++ 两个vector对象拼接方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11

最新评论