当前位置: 首页 > news >正文

【1】c++11新特性(稳定性和兼容性)—>原始字面量

在C++11中添加了定义原始字符串的字面量,定义方式为:R “xxx(原始字符串)xxx”其中()两边的字符串可以省略。原始字面量R可以直接表示字符串的实际含义,而不需要额外对字符串做转义或连接等操作。
编程过程中,使用的字符串中常带有一些特殊字符,对于这些字符往往要做专门的处理,使用了原始字面量就可以轻松的解决这个问题了,比如打印路径:

#include<iostream>
#include<string>
using namespace std;
int main()
{string str = "D:\hello\world\test.text";cout << str << endl;string str1 = "D:\\hello\\world\\test.text";cout << str1 << endl;/**************新特性**************/string str2 = R"(D:\hello\world\test.text)"; cout << str2 << endl;return 0;
}

R"(D:\hello\world\test.text)"使用了原始字面量R()中的内容就是描述路径的原始字符串,无需做任何处理.
再看一个输出HTML标签的例子:

#include<iostream>
#include<string>
using namespace std;
int main()
{
#if 0string str = "<html>\<head>\<title>\海贼王\</title>\</head>\<body>\<p>\我是要成为海贼王的男人!!!\</p>\</body>\</html>";cout << str << endl;
#else if //新特性string str = R"(<html><head><title>海贼王</title></head><body><p>我是要成为海贼王的男人!!!</p></body></html>)";cout << str << endl;
#endifreturn 0;
}

最后强调一个细节:在R “xxx(raw string)xxx” 中,原始字符串必须用括号()括起来,括号的前后可以加其他字符串,所加的字符串会被忽略,并且加的字符串必须在括号两边同时出现。

#include<iostream>
#include<string>
using namespace std;
int main()
{string str1 = R"(D:\hello\world\test.text)";cout << str1 << endl;string str2 = R"luffy(D:\hello\world\test.text)luffy";cout << str2 << endl;
#if 0string str3 = R"luffy(D:\hello\world\test.text)robin";	// 语法错误,编译不通过cout << str3 << endl;
#endifreturn 0;
}

通过输出的信息可以得到如下结论:使用原始字面量R “xxx(raw string)xxx”,()两边的字符串在解析的时候是会被忽略的,因此一般不用指定。如果在()前后指定了字符串,那么前后的字符串必须相同,否则会出现语法错误。

http://www.lryc.cn/news/194124.html

相关文章:

  • 学习pytorch13 神经网络-搭建小实战Sequential的使用
  • TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系
  • 【Python、Qt】使用QItemDelegate实现单元格的富文本显示+复选框功能
  • 【JVM】JVM类加载机制
  • 【面试经典150 | 区间】汇总区间
  • 主流接口测试框架对比
  • LeetCode 150.逆波兰表达式求值
  • 华为---企业WLAN组网基本配置示例---AC+AP组网
  • 循环结构的运用
  • 深度强化学习第 1 章 机器学习基础
  • 第一章 STM32 CubeMX (CAN通信发送)基础篇
  • 原子性操作
  • 论文阅读:Segment Any Point Cloud Sequences by Distilling Vision Foundation Models
  • Netty 入门 — 亘古不变的Hello World
  • idea插件开发javax.net.ssl.SSLException: No PSK available. Unable to resume.
  • Selenium的WebDriver操作页面的超时或者元素重叠引起的ElementClickInterceptedException
  • oracle数据库的缓存设置
  • 算法通关村第一关-链表青铜挑战笔记
  • ✔ ★【备战实习(面经+项目+算法)】 10.15学习时间表
  • pytorch 训练时raise EOFError EOFError
  • node.js+NPM包管理器+Webpack打包工具+前端项目搭建
  • PCL点云处理之基于FPFH特征的全局配准流程具体实现(二百二十一)
  • ai_drive67_基于不确定性的多视图决策融合
  • Docker逃逸---procfs文件挂载
  • [Python小项目] 从桌面壁纸到AI绘画
  • 【Docker 内核详解】namespace 资源隔离(五):User namespaces
  • 网络原理必知会
  • ELK 日志分析系统介绍与部署
  • Android 内存治理之线程
  • 三、K8S之ReplicaSet