C++如何优雅换行过长代码行?长字符串换行问题求助
解决C++长字符串优雅换行的问题
嘿,这个问题我太熟悉了!你直接换行没用真不是IDE或者编译器的问题——这是C++的语法规则决定的,字符串字面量中间的换行属于空白分隔符,编译器会直接报错。下面给你几种实用又优雅的解决方案:
方法1:字符串字面量自动拼接
C++编译器会自动把相邻的字符串字面量(用双引号包裹的部分)合并成一个完整字符串,所以你可以把长内容拆成多行,每行单独用双引号括起来就行,原有的转义字符也能正常生效:
const string a_string = "a long string with \" .. " "with \" again ... ... ";
甚至不用刻意对齐缩进,只要每个片段都用双引号包裹,编译器都会正确合并:
const string a_string = "a long string with \" .. " "with \" again ... ... ";
方法2:原始字符串字面量(C++11及以上)
如果你的字符串里有大量转义字符(比如你这里的双引号"),用原始字符串会更清爽——它允许你直接写换行和特殊字符,不用额外转义。语法是R"(内容)":
const string a_string = R"(a long string with " .. with " again ... ... )";
要是你的字符串里刚好包含)"这个组合(概率很低,但以防万一),还可以自定义分隔符,比如R"自定义标记(内容)自定义标记":
const string a_string = R"my_tag(a long string with ") .. with ") again ... ... )my_tag";
方法3:用std::string_view优化(C++17及以上)
如果这个字符串不需要被修改,用std::string_view代替std::string会更高效,拼接方式和第一种完全一致:
#include <string_view> constexpr std::string_view a_string = "a long string with \" .. " "with \" again ... ... ";
总结一下:直接换行不行是因为C不允许字符串字面量中间出现未处理的换行,上面这几种方法都能帮你优雅拆分长字符串,选哪种看你的C版本和字符串里的内容就行~
内容的提问来源于stack exchange,提问作者WhatABeautifulWorld
相关产品推荐
相关产品推荐

