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

C++11新特性1.原始字面量

目录

一.简介

1.基本概念

2.语法

二.示例代码

示例 1:简单的原始字面量

示例 2:使用定界符

示例 3:多行原始字面量


一.简介

1.基本概念

        在传统的 C++ 字符串字面量中,反斜杠 \ 被用作转义字符,用于表示一些特殊字符,如换行符 \n、制表符 \t 等。但当字符串中本身包含大量反斜杠或引号时,需要对这些字符进行转义,这会使字符串的书写变得复杂且难以阅读。原始字面量的出现就是为了解决这个问题,它允许你直接书写字符串,而无需对特殊字符进行转义。  

2.语法

R"delimiter(原始字符串内容)delimiter"

R:这是原始字面量的标识符,用于告诉编译器这是一个原始字符串字面量。

delimiter:这是一个可选的定界符,由最多 16 个基本字符(字母、数字、标点符号等)组成,用于标记原始字符串的开始和结束。定界符在开始和结束处必须保持一致。如果不指定定界符,默认使用空定界符。

(原始字符串内容):这是实际的字符串内容,其中可以包含任意字符,包括反斜杠和引号,无需进行转义。

二.示例代码

示例 1:简单的原始字面量

#include <iostream>
#include <string>

int main() {
    // 传统字符串字面量,需要对反斜杠和引号进行转义
    std::string traditional = "Hello, \"World!\"\\n";
    // 原始字符串字面量,无需转义
    std::string raw = R"(Hello, "World!"\n)";

    std::cout << "Traditional: " << traditional << std::endl;
    std::cout << "Raw: " << raw << std::endl;

    return 0;
}

在这个示例中,传统字符串字面量 traditional 需要对引号和反斜杠进行转义,而原始字符串字面量 raw 可以直接书写,无需转义。 

运行结果:

Traditional: Hello, "World!"\n
Raw: Hello, "World!"\n

示例 2:使用定界符

使用定界符原因:

在原始字符串字面量的基本语法 R"(原始字符串内容)" 里,字符串内容是用 ( 和 ) 括起来的。当字符串内容本身包含 ) 时,如果没有定界符,编译器就无法准确判断字符串的结束位置。这时就需要使用定界符来避免这种混淆。

#include <iostream>
#include <string>

int main() {
    // 使用定界符 "abc"
    std::string rawWithDelimiter = R"abc(This is a "raw" string with delimiter (abc).)abc";
    std::cout << "Raw with delimiter: " << rawWithDelimiter << std::endl;

    return 0;
}

当字符串内容中包含 ) 时,可以使用定界符来避免混淆。 

运行结果:

Raw with delimiter: This is a "raw" string with delimiter (abc).

示例 3:多行原始字面量

#include <iostream>
#include <string>

int main() {
    std::string multiLineRaw = R"(
        This is a multi-line
        raw string.
        It can contain "quotes"
        and \ backslashes without escaping.
    )";
    std::cout << "Multi-line raw string:" << std::endl;
    std::cout << multiLineRaw << std::endl;

    return 0;
}

 在这个示例中,原始字面量可以直接包含换行符,无需使用 \n 进行转义。

通过使用原始字面量,可以使包含特殊字符的字符串的书写更加简洁和易读。

运行结果:

Multi-line raw string:

        This is a multi-line
        raw string.
        It can contain "quotes"
        and \ backslashes without escaping.

相关文章:

  • 学之思社区版考试系统docker-compose部署
  • Selenium 中 ActionChains 支持的鼠标和键盘操作设置及最佳实践
  • Java入门:环境搭建与第一个HelloWorld程序
  • 八点八数字科技:AI数字人引领智慧文旅新时代
  • SyntaxError: Unterminated string literal
  • ReAct论文阅读笔记总结
  • Docker 搭建本地 cnpm 私有仓库
  • 【数据库系统概论】第一章 绪论
  • 奇安信 2025 年护网蓝队初选笔试题(附答案解析)
  • 一网打尽:文本、图像与变体的统一扩散模型
  • 【Linux】——初识操作系统
  • thingsboard edge 在windows 环境下的配置
  • 香港地区上线独立多用户电商平台系统需要注意哪些问题
  • Kotlin和Java区别
  • ruoyi-ai开源项目启动
  • Trae AI 开发工具使用手册
  • 使用Galaxy创建生物信息学工作流的步骤详解
  • 【招聘精英】
  • RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践
  • FreeRTOS第17篇:FreeRTOS链表实现细节05_MiniListItem_t:FreeRTOS内存优化
  • 怎么做同学录的网站/seo工资服务
  • 建设文化产业网站的方案/百度收录提交入口地址
  • 旅游景点网站建设方案/中国网站建设公司
  • 在线名片制作网站开发/seo优化seo外包
  • 真人男女直接做的视频网站/西安seo外包服务
  • 做关于植物的网站/企业推广app