【问题标题】:c++ raw string unicode literals时间:2019-01-10 标签:c++rawstringunicodeliterals
【发布时间】:2019-09-21 10:26:04
【问题描述】:

我可以简单地制作具有警报字符 \a 或 unicode \u002f 字符的原始字符串吗?
如果是,那么在没有\ 的情况下如何进行转义?
如果不是,那么原始字符串是否仅用于可打印字符?我的理解对吗?

这是一个简单的问题,但这个网站需要更多信息,所以我只想说我阅读了大约 30 个关于 C++ 和 python 中的原始字符串以及 Stroustrup 的 C++ 的网页,但没有找到任何句子说原始字符串仅用于可打印字符。

所有示例都使用" 或真正的换行符,方法是按键盘上的回车键“必须已将其转换为文字以合并到原始字符串中>>>这是什么文字?”

最后一句话的意思是,当不同的作者举例说明普通字符串和原始字符串之间的区别时,他们说原始字符串可以有双引号和反斜杠而无需转义字符...。

原始字符串也可以有不带 \n 符号的新行 >>>这将在发短信时通过按键盘上的 Enter 按钮来完成。

但是其他不可打印的字符,如 \a 和 unicode 代码点呢? 这就是我的问题?

所以我的问题是关于概念而不是某些代码或示例。

再次简单地说:原始字符串是否能够包含警报字符或 unicode 代码点?
我可以将string s=u8"hello world \a" 转换为string s = u8R"(hello world \a)",其中两个字符串的末尾都会发出警报声????

【问题讨论】:

    标签: c++ string


    【解决方案1】:

    您不能在原始字符串中使用任何转义字符。以下行按原样打印

    std::cout << R"(\t\aline1\nline2\n)"
    
    output:
    \t\aline1\nline2\n
    

    但是,您可以在同一行代码中退出原始字符串并返回。例如,以下行将使用转义字符连接原始字符串:

    std::string s = "\t\a" u8R"(line1)" "\n" R"(line2)" "\n";
    

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多