C++字符串类

C++ string class

本文关键字:字符串 C++      更新时间:2023-10-16

我拿起了一个C++代码在我的程序中使用,但我在其中发现了一个我无法理解的字符串声明。双引号应该标记字符串的开头和结尾,对吧?但是在这个字符串声明中,有很多双引号。编译器是如何计算的?

我尝试编译,它编译

using namespace cv;
using namespace std;
std::string keys = "{ help  h     | | Print help message. }"
"3: VPU }";

引号(甚至空引号)中带有或不带有编码前缀的字符序列是 [lex.string] 中的字符串文字。

所以"{ help h | | Print help message. }"是字符串文字,"3: VPU }"也是如此。

根据 [lex.string]/13:

。相邻的字符串文本连接在一起。

所以结果与:

std::string keys = "{ help  h     | | Print help message. }3: VPU }";

当两个或多个字符串彼此相邻时,它们由编译器连接,前提是它们不应由空格、制表符或换行符以外的任何内容分隔。

下面的代码将起作用:

std::string keys = "abc" "def" "ghi";

但以下不会:

std::string keys = "abc","def","ghi";
<</div> div class="answers">

预处理器将连接字符串文字以形成单个字符串文字,即 "abc" "def"将在任何分配或其他使用之前连接成"abcdef"