C++ 拆分C++;多行上的字符串(代码语法,而不是解析)

C++ 拆分C++;多行上的字符串(代码语法,而不是解析),c++,string,syntax,coding-style,readability,C++,String,Syntax,Coding Style,Readability,不要与如何按解析方式拆分字符串混淆,例如: 对于如何在C++中将字符串分割成多行,我有点困惑。 这听起来像一个简单的问题,但以下面的例子为例: #include <iostream> #include <string> main() { //Gives error std::string my_val ="Hello world, this is an overly long string to have" + " on just one line";

不要与如何按解析方式拆分字符串混淆,例如:

对于如何在C++中将字符串分割成多行,我有点困惑。 这听起来像一个简单的问题,但以下面的例子为例:

#include <iostream>
#include <string>
main() {
  //Gives error
  std::string my_val ="Hello world, this is an overly long string to have" +
    " on just one line";
  std::cout << "My Val is : " << my_val << std::endl;

  //Gives error
  std::string my_val ="Hello world, this is an overly long string to have" &
    " on just one line";  
  std::cout << "My Val is : " << my_val << std::endl;
}
#包括
#包括
main(){
//出错
std::string my_val=“你好,这个字符串太长了”+
“仅一行”;

STD::CUT< P>不要在字符串之间放置任何东西。C++词条的一部分是将相邻字符串文字(甚至在新行和注释上)组合成单个文字。

#include <iostream>
#include <string>
main() {
  std::string my_val ="Hello world, this is an overly long string to have" 
    " on just one line";
  std::cout << "My Val is : " << my_val << std::endl;
}

由于stringify处理器操作符的工作方式,这里有些奇怪,因此需要两个级别的宏才能将
two
的实际值转换为字符串文字。

它们都是文字吗?用空格分隔两个字符串文字与串联相同:
“abc”“123”与 > ABC123“< /Cord>”。这适用于C++和C++。

< P>我不知道它是GCC中的扩展还是标准,但是看起来你可以用反斜线结束行(如大多数类型的行可以在C++中扩展,例如宏跨多行),继续字符串文字。

#包括
#包括
int main()
{
std::string str=“你好,世界”\
这似乎有效”;

std::你能混合其他项目,比如一个int常量吗?如果不能,我该如何添加它们?@Jason:混合int常量是什么意思?我的函数(arg_1,arg_2,“hello world,这个字符串有两行长!”);组合字符串文字是词法阶段的实际部分(不是预处理器),因为像这样的字符串拆分被定义为语言的一部分。@Jason,从你的后续问题来看,看起来你需要类似上面的
STRINGIFY
宏的东西。这种文字语法在
world
this
之间包含了很多空格。MacGuy:的确,我没有注意到。很简单如果移动第二个(及后续)项,则要修复的h一直到左边。但是这会把你的缩进的外观弄得一团糟。是我最初的方法,但是我放弃了它,因为缩进/间距问题。SunLangeGeTebug大纲。很好地注意。这里有一个有趣的小点:C++ LoxER实际上并不关心你放置BEF的多少引文。ore和后面是一个字符串,只有两个例外。您使用的引号数必须是奇数,并且两边必须匹配。
“”“这是一个有效字符串,将进行分析“”
。但是,这些字符串没有特殊属性,它们的行为就像单引号一样。非常有趣,感谢您分享这一点……这有什么有用的用途吗?您可以将其用作代码中不同字符串组的微妙标记,以便通过perl/bash/python脚本进行外部解析。这就是我所能做的一切现在想想。@ThomasAnthony之所以会这样,是因为它会将结尾处的引号视为一堆空字符串,并将它们连接在一起——这不是一个功能,而是标准的C/C++行为
#include <iostream>
#include <string>
main() {
  std::string my_val ="This string gets displayed over\n" 
    "two lines when sent to cout.";
  std::cout << "My Val is : " << my_val << std::endl;
}
#include <iostream>
using namespace std;

#define TWO 2
#define XSTRINGIFY(s) #s
#define STRINGIFY(s) XSTRINGIFY(s)

int main(int argc, char* argv[])
{
    std::cout << "abc"   // Outputs "abc2DEF"
        STRINGIFY(TWO)
        "DEF" << endl;
    std::cout << "abc"   // Outputs "abcTWODEF"
        XSTRINGIFY(TWO) 
        "DEF" << endl;
}
#include <iostream>
#include <string>

int main ()
{
    std::string str = "hello world\
    this seems to work";

    std::cout << str;
    return 0;
}