C++ 原始字符串字面值

C++ 原始字符串字面值

什么是字符串字面值

匿名字符串或字符串字面值是计算机程序源代码中表示字符串值的字面量。例如,x = “foo”,其中”foo”是一个具有值”foo”的字符串字面值,在现代计算机语言中经常使用一系列用引号括起来的字符,被形式上称为”括号定界符”。通过使用转义序列等技术,可以避免定界符碰撞(括号问题),从而使定界符可以包含在字符串中。在复杂情况下,有许多可用于定义字符串字面值的替代符号。具体的符号表示将根据所使用的计算机语言而有所不同。但是,大多数现代编程语言都遵循一些广泛的规则。

什么是原始字符串字面值

字面值是在整个程序运行过程中其值保持不变的变量。相反,原始字符串字面值是一种不处理C++转义字符(如’n’、’t’或'”‘)的字符串。因此,创建了一个以R”(开头并以)”结尾的原始字符串字面值。

原始字符串字面值的语法:

R "delimiter( raw_characters )delimiter" // delimiter is the end of logical entity

在这种情况下,定界符是可选的,可以是除反斜杠(/)、空白()和括号()以外的任何字符。

这些原始字符串字面量通过准确地编码字符内容作为原始字符序列,使字符序列成为可能。

示例:

普通字符串字面量

"\\\\n"

原始字符串文字示例

#include 
using namespace std;



int main()
{

    string string1 = "Good.\nFor.\nNothing.\n";


    string string2 = R"(Javatpoint)";

    cout << string1 << endl;

    cout << string2 << endl;

    return 0;
}

什么是字符串中的成对定界符

许多语言允许使用成对的定界符,其中开头和结尾的定界符是不同的。此外,由于它们经常允许嵌套字符串,只要它们是成对的,就可以插入定界符,尽管插入一个孤立的闭合定界符仍然会导致定界符冲突。例如,m4使用撇号(’)作为结束定界符,而PostScript使用圆括号,如(The swift(brown fox))。Tcl支持引号(用于插值字符串)和大括号(用于原始字符串),如 “The quick brown fox” 或 The quick brown fox。这是因为在Tcl中,代码块在语法上等同于字符串文字,定界符成对的特性对于实现这一点至关重要。

在Unicode字符集中,单引号和双引号有成对(不同的开头和结尾)版本。

"Hi There!"
 'Hi There!'
 ?Hi There!"

 «Hi There!»

什么是字符串字面量中的分隔符冲突问题

在使用引号时,如果要表示字符串字面量中的分隔符本身,就会出现分隔符冲突问题。例如,如果双引号作为分隔符,那么不能简单地用字面值”来表示一个双引号,因为第二个引号会被解释为字符串字面量的结束而不是字符串的值,所以不能写成””或者”This is “in quotes”, but invalid.”,因为中间的引号会被解释为不在引号内。有几种解决方案,其中最通用的是使用转义序列,比如”””或者”This is “in quotes” and properly escaped”。当然,还有其他额外的选项。

分隔符冲突问题不能通过成对的引号来解决,比如在Tcl中的花括号,因为不能简单地添加一个不平衡的闭合分隔符。然而,成对的引号可以允许嵌套的字符串,比如foo bar zork。

转义序列

转义序列是表示那些难以直接表示的字符,比如分隔符、非打印字符(如退格符)、换行符和空白字符(在视觉上无法区分的字符)的通用方法,具有很长的历史,因此在字符串字面量中经常使用。将转义序列添加到单个字符或整个字符串中被称为转义。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程