Modern C++字面量一网打尽

C++ Literals

数值

二进制、八进制、十六进制字面量

  • 二进制:0b0B开头。
  • 八进制:0开头。
  • 十六进制:0x0X开头。
// for different base
constexpr int base2 = 0b1111;  // 二进制 15
constexpr int base8 = 017;     // 8进制 15
constexpr int base10 = 15;     // 十进制 15
constexpr int base16 = 0xf;    // 16进制 15
// 检查
static_assert(base2 == 15);
static_assert(base8 == 15);
static_assert(base10 == 15);
static_assert(base16 == 15);

单引号作为数值分隔符

C++14 引入了单引号作为数值分隔符,可以提高可读性。

// ' separator for digit grouping
constexpr int a = 1'000'000;  // 1000000, 十进制
static_assert(a == 1000000);// 同样适用于其他进制单位
constexpr int c = 0b1'0000;  // 16, 二进制
static_assert(c == 16);constexpr int d = 01'0000;  // 4096, 八进制
static_assert(d == 4096);constexpr int b = 0x1'0000;  // 65536, 十六进制
static_assert(b == 65536);

修饰存储类型

  • uU:表示无符号整数(unsigned)。
  • lL:表示长整型(long)。
  • llLL:表示长长整型(long long)。
  • z:表示带符号的std::size_t
// 修饰存储类型
#include <type_traits>
auto si = 1;  // int, 默认
static_assert(std::is_same_v<decltype(si), int>);auto ui = 1u;  // unsigned int
static_assert(std::is_same_v<decltype(ui), unsigned int>);auto ul = 1ul;  // unsigned long
static_assert(std::is_same_v<decltype(ul), unsigned long>);auto ull = 1ull;  // unsigned long long
static_assert(std::is_same_v<decltype(ull), unsigned long long>);auto l = 0l;  // long
static_assert(std::is_same_v<decltype(l), long>);auto ll = 0ll;  // long long
static_assert(std::is_same_v<decltype(ll), long long>);auto z = 0z;  // from C++23, 带符号的 std::size_t
static_assert(std::is_same_v<decltype(z), std::ptrdiff_t>);auto uz = 0uz;  // from C++23
static_assert(std::is_same_v<decltype(uz), std::size_t>);
#include <vector>
void sample(std::vector<int>& vec) {// uz 的另外一个用法, 如果不加后缀会出现无符号数和有符号数的比较警告for (auto i = 0uz; i < vec.size(); ++i) {// do something}// 逆序遍历for (auto i = vec.size(); i--;) {// do something}
}

浮点数字面量修饰符:

  • fF:表示float类型。
  • lL:表示long double类型。
// 修饰浮点数
auto f = 1.0f;  // float
static_assert(std::is_same_v<decltype(f), float>);
auto d = 1.0;  // double, 默认
static_assert(std::is_same_v<decltype(d), double>);
auto ld = 1.0l;  // long double
static_assert(std::is_same_v<decltype(ld), long double>);

科学计数法

// 科学计数法
constexpr double e = 1e3;  // 1000.0
static_assert(e == 1000.0);
constexpr auto E = 1E3;  // 1000.0
static_assert(E == 1000.0);

字符字面量

字符字面量修饰符:

  • u:表示一个UTF-16字符(char16_t类型)。
  • U:表示一个UTF-32字符(char32_t类型)。
  • L:表示一个宽字符(wchar_t类型)。
  • u8:表示一个UTF-8字符(char类型)。
// 修饰字符
auto c = 'a';  // char, 默认
static_assert(std::is_same_v<decltype(c), char>);auto wc = L'汉';  // wchar_t
static_assert(std::is_same_v<decltype(wc), wchar_t>);auto u8c = u8'a';  // char8_t
static_assert(std::is_same_v<decltype(u8c), char8_t>);auto u = u'a';  // char16_t
static_assert(std::is_same_v<decltype(u), char16_t>);auto U = U'a';  // char32_t
static_assert(std::is_same_v<decltype(U), char32_t>);

字符串字面量

原始字符串字面量

对于多行字符串,可以使用原始字符串字面量,这样就不需要转义字符了。

// 原始字符串字面量
auto json = R"({"key": "value"})";
static_assert(std::is_same_v<decltype(json), const char*>);

std::string 字面量

C++14 引入了std::string字面量,可以直接使用字符串字面量初始化std::string对象。

// std::string 字面量
#include <string>
using namespace std::string_literals;  // C++14
auto str = "hello"s;                   // 注意这里的 s
static_assert(std::is_same_v<decltype(str), std::string>);

utf-8 字符串字面量

C++17 引入了utf-8字符串字面量,可以直接使用utf-8字符串字面量初始化std::string对象。

// utf-8 字符串字面量
auto utf8 = u8"你好";
static_assert(std::is_same_v<decltype(utf8), const char*>);

其他字面量

布尔字面量

// 布尔字面量
auto boolean = true;  // bool, 默认
static_assert(std::is_same_v<decltype(boolean), bool>);
auto b2 = false;  // bool
static_assert(std::is_same_v<decltype(b2), bool>);

空指针字面量

// 空指针字面量
auto null = nullptr;  // std::nullptr_t, 默认
static_assert(std::is_same_v<decltype(null), std::nullptr_t>);

用户定义的字面量(User-Defined Literals, UDL)

C++11 引入了用户定义的字面量(User-Defined Literals, UDL),允许程序员为自定义类型定义自己的字面量表示。这通过定义一个字面量运算符实现,运算符以 _ 开头,后跟一个或多个字符。

以下是一个简单的例子,定义一个用于表示长度的用户定义字面量:

#include <iostream>// 定义一个表示长度的结构体
struct Length {double value; // 长度值enum Unit { meter, kilometer, centimeter }; // 单位Unit unit; // 长度单位// 构造函数Length(double val, Unit u) : value(val), unit(u) {}
};// 用户定义的字面量,用于米
Length operator"" _m(long double val) {return Length(val, Length::meter);
}// 用户定义的字面量,用于千米
Length operator"" _km(long double val) {return Length(val, Length::kilometer);
}// 用户定义的字面量,用于厘米
Length operator"" _cm(long double val) {return Length(val, Length::centimeter);
}int main() {Length length1 = 10.0_m; // 10米Length length2 = 5.0_km; // 5千米Length length3 = 100.0_cm; // 100厘米std::cout << "Length1: " << length1.value << " meters\n";std::cout << "Length2: " << length2.value << " kilometers\n";std::cout << "Length3: " << length3.value << " centimeters\n";return 0;
}

源码

完整的样例在这里.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch:使用 Llamaindex 的 RAG 与 Elastic 和 Llama3

这篇文章是对之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG” 的一个补充。我们可以在本地部署 Elasticsearch&#xff0c;并进行展示。我们将一步一步地来进行配置并展示。你还可以参考我之前的另外一篇文章 “Elasticsearch&#xff1a;使用在本地计算机上运行的 LLM 以…

Android frida 实战: 分析全民K歌的判断逻辑

本篇进入 Android frida 实战&#xff0c;旨在分析学习全民K歌这个 app 演唱页面的判断逻辑。 版本&#xff1a;8.22.38.278 此 app 为腾讯推出的面向国内的社交娱乐类应用软件&#xff0c;主要功能是提供用户唱歌、录制和分享自己演唱的歌曲。当非 vip 用户演唱某 vip 歌曲等功…

三元前驱体废水回收镍钴工艺:环保与经济效益的双重胜利

在全球新能源产业迅猛发展的背景下&#xff0c;锂离子电池作为绿色能源的核心组件&#xff0c;其需求量激增&#xff0c;带动了上游材料市场&#xff0c;尤其是三元前驱体材料的蓬勃发展。然而&#xff0c;伴随着行业的快速扩张&#xff0c;三元前驱体生产过程中产生的含镍钴废…

Qt开发 | Qmake与CMake | Qt窗口基类 | VS Qt项目与QtCreator项目相互转化 | Qt架构 | Qt学习方法

文章目录 一、Qmake与CMake介绍1.Qmake2.CMake3.使用qmake还是cmake&#xff1f; 二、Qt3个窗口基类的区别三、vs qt与QtCreator项目相互转化方法1.QtCreator项目转VS Qt2.VS Qt项目转QtCreator项目 四、Qt架构介绍与学习方法详解 一、Qmake与CMake介绍 Qmake和CMake都是构建系…

干货分享 | TSMaster 中不同总线报文消息过滤的操作方式

TSMaster软件平台支持对不同总线&#xff08;CAN、LIN、FlexRay&#xff09;报文和信号的过滤&#xff0c;包括全局接收过滤、数据流过滤、窗口过滤、字符串过滤、可编程过滤&#xff0c;针对不同的总线信号过滤器的使用方法基本相同。今天重点和大家分享一下关于TSMaster中报文…

全国首场以AI数字内容风控为主题的大会正式官宣,首批演讲嘉宾和议题揭晓!

曾经我们感叹的“AI迎来了iPhone时刻”&#xff0c;如今已变成“iPhone迎来了AI时刻”。前段时间&#xff0c;苹果全球开发者大会的召开&#xff0c;以及闻声而起的资本市场&#xff0c;无一不再次佐证了AI的无穷想象。 从OpenAI直播演示GPT-4o和谷歌的I/O开发者大会2024&…

Unity踩坑记录

1. 如果同时在父物体和子物体上挂载BoxCollider&#xff0c;那么当使用&#xff1a; private void OnTriggerEnter2D(Collider2D collision){if (collision.CompareTag("CardGroup")){_intersectCardGroups.Add(collision.GetComponent<CardGroup>());}} 来判…

【linux学习十七】文件服务管理

一、FTP FTP server:FTP(File Transfer Protocol,文件传输协议 )是 TCP/IP 协议组中的协议之一 软件包&#xff1a;vsftpd/安装 yum -y install vsftpd//准备文件 touch /var/ftp/abc.txt //注释:FTP服务器的主目录:“/var/ftp/”&#xff0c;是FTP程序分享内容的本机目录…

数据库 复习题

有一个关系模式&#xff1a;工程关系&#xff08;工程号&#xff0c;工程名称&#xff0c;职工号&#xff0c;姓名&#xff0c;聘期&#xff0c;职务&#xff0c;小时工资率&#xff0c;工时&#xff09;&#xff0c;公司按照工时和小时工资率支付工资&#xff0c;小时工资率由…

【大数据】—二手车用户数据可视化分析案例

项目背景 在当今的大数据时代&#xff0c;数据可视化扮演着至关重要的角色。随着信息的爆炸式增长&#xff0c;我们面临着前所未有的数据挑战。这些数据可能来自社交媒体、商业交易、科学研究、医疗记录等各个领域&#xff0c;它们庞大而复杂&#xff0c;难以通过传统的数据处…

Webpack: 底层配置逻辑

概述 Webpack 5 提供了非常强大、灵活的模块打包功能&#xff0c;配合其成熟生态下数量庞大的插件、Loader 资源&#xff0c;已经能够满足大多数前端项目的工程化需求&#xff0c;但代价则是日益复杂、晦涩的使用方法&#xff0c;开发者通常需要根据项目环境、资源类型、编译目…

huggingface 笔记:peft

1 介绍 PEFT 提供了参数高效的方法来微调大型预训练模型。传统的范式是为每个下游任务微调模型的所有参数&#xff0c;但由于当前模型的参数数量巨大&#xff0c;这变得极其昂贵且不切实际。相反&#xff0c;训练较少数量的提示参数或使用诸如低秩适应 (LoRA) 的重新参数化方法…

探索增删改查(CRUD)操作在软件开发中的重要性

在软件开发中&#xff0c;CRUD&#xff08;Create&#xff0c; Read&#xff0c; Update&#xff0c; Delete&#xff09;是常见且基础的操作集合&#xff0c;它们构成了对数据进行基本管理和操作的核心。无论是开发Web应用、移动应用还是管理系统&#xff0c;了解和有效地实施…

通过分离有色和无色pdf页面减少打印费

该工具是我认识的一位中科大的大佬在本科毕业的时候做的一个小工具&#xff0c;去打印店打印全彩的毕业论文的话会比较贵&#xff0c;他想到有没有一种方案可以实现有彩色页面的pdf和没有彩色页面的pdf分开打印&#xff0c;前者打印彩色&#xff0c;后者打印黑白&#xff0c;这…

深入浅出:NPM常用命令详解与实践

深入浅出地讲解npm常用命令及其实践&#xff0c;可以帮助开发者更好地理解和使用这个强大的Node.js 包管理工具。以下是一些常用的npm命令及其详细解释和实践案例&#xff1a; 1&#xff1a;初始化项目&#xff1a; 命令&#xff1a;npm init用途&#xff1a;生成一个package…

MySQL数据库(二):数据库基本操作

MySQL是一种流行的关系型数据库管理系统&#xff0c;广泛用于Web应用和各种数据存储需求。通过本次介绍&#xff0c;您将学习如何进行MySQL数据库的基本操作&#xff0c;包括创建数据库和表、插入和查询数据、更新和删除记录。这些基础知识将为您打下坚实的数据库操作基础。 目…

2023国家最高科学技术奖薛其坤院士:科学家的幸福感来自于哪里

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;2000字丨8分钟阅读 6 月 24 日&#xff0c;2023 年度国家最高科学技术奖在京揭晓&#xff0c;薛其坤院士荣获中国科技界崇高荣誉&#xff0c;这不…

【软件下载】Camtasia Studio 2024详细安装教程视频

习惯上来说Camtasia Studio是一款简单易用的高清录屏和视频编辑软件&#xff0c;拥有录制屏幕和配音、视频的剪辑和过场动画片、添加说明字幕和水印、制作视频封面和菜单、视频压缩和播放。不得不说Camtasia是一款屏幕录制和视频剪辑软件&#xff0c;教授课程&#xff0c;培训他…

字节跳动联手博通:5nm AI芯片诞生了?

字节跳动联手博通&#xff1a;5nm AI芯片诞生了&#xff1f; 前言 就在6月24日&#xff0c;字节跳动正在与美国博通合作开发一款5纳米工艺的专用集成电路(ASIC) AI处理器。这款芯片旨在降低采购成本并确保高端AI芯片的稳定供应。 根据报道&#xff0c;尽管芯片设计工作进展顺利…

力扣SQL50 即时食物配送 II min函数 嵌套查询

Problem: 1174. 即时食物配送 II &#x1f468;‍&#x1f3eb; 参考题解 Code -- 计算立即配送的订单百分比 select round (-- 计算订单日期与客户偏好配送日期相同的订单数量sum(case when order_date customer_pref_delivery_date then 1 else 0 end) * 100 /-- 计算总订…