0

0

C++ literal_C++字面量常量语法详解

星降

星降

发布时间:2026-01-08 17:10:02

|

526人浏览过

|

来源于php中文网

原创

字面量类型由后缀和上下文共同决定:整数如123默认为int(若可容纳),123ull强制为unsigned long long;浮点如1.0为double、1.0f为float;字符串字面量类型是const char[n],非std::string;udl后缀须以下划线开头且函数需constexpr;nullptr类型为std::nullptr_t。

c++ literal_c++字面量常量语法详解

字面量的类型由后缀和上下文共同决定

不加修饰的数字字面量,比如 1233.14,类型不是“默认 int”或“默认 double”——C++ 标准只规定了最小保证范围,具体类型取决于字面量形式和编译器实现。例如:123int(如果 int 能容纳),但 1234567890123 在 32 位系统上就可能是 long long123U 明确是 unsigned int,而 123ULL 强制为 unsigned long long

浮点字面量同理:1.0double1.0ffloat1.0Llong double。漏写 f 可能在 float 比较中引发隐式转换和精度丢失,比如 float x = 0.1; 实际存储的是近似值,而 0.1f == 0.1false(后者是 double)。

字符串字面量的类型是 const char[N],不是 std::string

"hello" 得到的是一个以 \0 结尾的字符数组,类型为 const char[6](含终止符)。它不能直接赋给 std::string 变量而不触发构造(虽然语法允许,那是调用了隐式构造函数),更不能赋给 char*(C++11 起禁止非 const 转换)。

  • const char* p = "hello"; ✅ 合法
  • char* p = "hello";编译错误(弃用的转换)
  • std::string s = "hello"; ✅ 调用 std::string(const char*) 构造
  • auto s = "hello";s 类型是 const char[6],不是 std::string

多行字符串必须用反斜杠续行或用原始字符串字面量:R"(line1\nline2)",否则 "line1\nline2" 中的换行会破坏语法。

立即学习C++免费学习笔记(深入)”;

用户定义字面量(UDL)要小心返回类型和求值时机

定义像 123_km 这样的字面量,本质是调用一个带特定后缀名的 constexpr 函数。它必须满足:参数类型只能是 unsigned long longlong doubleconst char*charwchar_t 等有限几种,且函数必须是 constexpr 才能用于常量表达式。

易语言学习手册 十天学会易语言图解教程  pdf版
易语言学习手册 十天学会易语言图解教程 pdf版

十天学会易语言图解教程用图解的方式对易语言的使用方法和操作技巧作了生动、系统的讲解。需要的朋友们可以下载看看吧!全书分十章,分十天讲完。 第一章是介绍易语言的安装,以及运行后的界面。同时介绍一个非常简单的小程序,以帮助用户入门学习。最后介绍编程的输入方法,以及一些初学者会遇到的常见问题。第二章将接触一些具体的问题,如怎样编写一个1+2等于几的程序,并了解变量的概念,变量的有效范围,数据类型等知识。其后,您将跟着本书,编写一个自己的MP3播放器,认识窗口、按钮、编辑框三个常用组件。以认识命令及事件子程序。第

下载
constexpr long long operator"" _km(unsigned long long val) {
    return static_cast<long long>(val * 1000);
}
// 使用
constexpr auto d = 5_km; // ✅ 编译期计算
int x = 5_km;            // ✅ 运行时也行,但失去 constexpr 优势

常见陷阱:

  • 后缀名必须以 underscore 开头(如 _km),否则编译失败
  • 返回类型若不是字面量类型(如含非静态成员的类),就不能用于 constexpr 上下文
  • 字符串 UDL(operator"" _s(const char*, size_t))参数是裸指针 + 长度,不带终止符,别直接当 C 字符串用

布尔和空指针字面量没有歧义,但要注意模板推导

truefalse 类型固定为 bool,不会退化成整数;nullptr 类型是 std::nullptr_t,专用于指针比较,比 NULL(常定义为 0((void*)0))更安全。

但在模板函数中,nullptr 的类型推导可能出人意料:

template<typename T>
void f(T) { }
<p>f(nullptr); // T 推导为 std::nullptr_t,不是 void*
f(0);       // T 推导为 int</p>

所以重载函数里区分指针和整数时,void f(std::nullptr_t)void f(void*) 更精准;而用 auto 推导时,auto p = nullptr; 得到的是 std::nullptr_t,不是指针类型,不能解引用。

字面量看着简单,但类型细节一旦错位,轻则隐式转换带来性能损耗,重则模板匹配失败或 constexpr 场景编译不过。最易被忽略的是字符串字面量的数组类型本质,以及 UDL 后缀命名规则和 constexpr 约束。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

595

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

106

2025.10.23

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

562

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.2万人学习

C 教程
C 教程

共75课时 | 5.4万人学习

C++教程
C++教程

共115课时 | 21.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号