C++11原始字面量

        在C++中有两种类型的字面量,一种是1、11、111这种数字字面量,这种字面量没有歧义,可以原封不动的输出出来;还有一种是字符串字面量,如“Hello C++”、“D:\code\test\main.cc”,在编程过程中,常常会遇见使用的字符串带有特殊符号的情况如转义字符“\”,为了正确的使用这些字符串,我们往往需要对这些字符串进行特殊处理,这时原始字面量就能很好的解决问题了。

        C++11中添加了定义原始字符串字面量的方法,定义方式为:R"xxx(原始字符串的内容)xxx",其中括号两边的xxx起注释作用,可以省略。原始字面量R可以直接表示字符串的实际含义,而不需要额外对字符串做转义或连接等操作。

#include <iostream>
#include <string>
using namespace std;

int main() {
	string str1 = "D:\code\test\main.cc";
	string str2 = "D:\\code\\test\\main.cc";
	string str3 = R"nomore15(D:\code\test\main.cc)nomore15";

	cout << str1 << endl;
	cout << str2 << endl;
	cout << str3 << endl;

	return 0;
}

        输出结果: 

         在str1中\c和\m转义失败,会保持原样输出,而\t则转义成了制表符。在str2中,用\将其本身从特殊字符转译成了普通字符,故会将\保持原样输出。在str3中,()左右两边的字符均被忽略,而()中的内容不会做任何处理。

        \除了做转义字符,还会做续航符。所以当一个字符串占了多行的时候也可以使用原始字面量。

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1 = "\
    <html>\
        <head>\
            <title>\
                C++学习\
            </title>\
        </head>\
            <body>\
                <p>\
                    原始字面量\
                </p>\
            </body>\
    </html>";

    string str2 = R"(
    <html>
        <head>
            <title>
                C++学习
            </title>
        </head>
            <body>
                <p>
                    原始字面量
                </p>
            </body>
    </html>)";

    cout << str1 << "\n" << endl;
    cout << str2 << endl;


    return 0;
}

        输出结果:

         在C++11之前如果一个字符串分别写到了不同的行里边,需要加连接符,这种方式不仅繁琐,还破坏了表达式的原始含义,如果使用原始字面量就变得简单很多,很强直观,可读性强。

        在R “xxx(raw string)xxx” 中,原始字符串必须用括号()括起来,括号的前后可以加其他字符串,所加的字符串会被忽略,并且加的字符串必须相同且在括号两边同时出现。xxx中不能出现空格且不能超过15个ASCII字符。

相关推荐

  1. C++11的互斥

    2024-07-15 06:54:04       51 阅读
  2. 【.Net8教程】(二)原始字符串字面

    2024-07-15 06:54:04       34 阅读
  3. C++字符串String和字符串字面String Literals

    2024-07-15 06:54:04       20 阅读
  4. ts字面类型

    2024-07-15 06:54:04       52 阅读
  5. typescript-字面

    2024-07-15 06:54:04       30 阅读
  6. C#字典底层原理

    2024-07-15 06:54:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 06:54:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 06:54:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 06:54:04       58 阅读
  4. Python语言-面向对象

    2024-07-15 06:54:04       69 阅读

热门阅读

  1. 软设之中介者模式

    2024-07-15 06:54:04       22 阅读
  2. Go语言指针及不支持语法汇总

    2024-07-15 06:54:04       22 阅读
  3. linux命令更新-iostat 和 iotop

    2024-07-15 06:54:04       22 阅读
  4. IOSUI自动化之mobiledevice

    2024-07-15 06:54:04       22 阅读
  5. Flask `before_request` 方法解析

    2024-07-15 06:54:04       26 阅读
  6. Hive常用内置函数合集

    2024-07-15 06:54:04       20 阅读
  7. ArrayList和LinkedList的区别

    2024-07-15 06:54:04       23 阅读
  8. 【python】数据类型和运算符

    2024-07-15 06:54:04       20 阅读
  9. 前端系列-5 SCSS使用介绍

    2024-07-15 06:54:04       24 阅读
  10. Flutter笔记--WebSocket

    2024-07-15 06:54:04       22 阅读
  11. MongoDB Shard 集群 Docker 部署

    2024-07-15 06:54:04       25 阅读
  12. 数据结构第27节 优先队列

    2024-07-15 06:54:04       21 阅读