【问题标题】:Are raw strings faster than normal strings?原始字符串比普通字符串快吗?
【发布时间】:2017-05-20 21:09:58
【问题描述】:

我想问一下 编译时,原始字符串是否比普通字符串快。

让我解释一下“原始”和“正常”字符串的含义... 我们知道有一个“R”字面量。

const char * raw = R"(Hello\nWorld!)"; 将输出

Hello\nWorld!

const char * normal = "Hello\nWorld!" 将输出

Hello
World!

那么实际上更快的是什么?我认为将 R-Literal 用于 Hi, how are you? 之类的字符串比我们使用字符串的“正常”方式要快。

【问题讨论】:

  • 它们都在编译时被解析。那么您是在询问编译时间或运行时影响吗?
  • 我忘了说,我问的是编译时间。我确信 R-literal 在编译时比另一种更快,不是吗?
  • 我不这么认为。
  • 你为什么在乎?您是否打算将千兆字节的数据放入字符串文字中?
  • 原始字符串文字允许您将字符串输入到源代码中,而无需考虑转义序列。它们与程序速度无关。

标签: c++ string literals


【解决方案1】:

那么实际上更快的是什么?我认为将 R-Literal 用于诸如 Hi 之类的字符串,你好吗?比我们使用字符串的“正常”方式更快。

好的,当您询问 "normal" 或原始字符串文字对编译时间的影响时,可能可以更快地处理原始字符串文字,因为编译器不需要处理转义字符解析和翻译。

虽然我相信差异不会很大。

原始字符串字面量的主要优点是,您在编写源代码时无需关心转义特殊字符。

【讨论】:

  • 感谢您回答我的问题!顺便说一句,“原始字符串文字的主要优点是,您在编写源代码时不需要关心转义特殊字符。”,那么 R 文字会修复一些 MySQL 字符问题吗?
  • @Lazcano “那么 R-literal 会修复一些 MySQL 字符问题吗?” 也许吧。取决于具体的用例。
  • @Lazcano> 安全答案:不。从上下文来看,我 99% 确信您混淆了非常不同的转义案例及其含义。
  • 我想我真的这样做了
【解决方案2】:

在特定编译器中解析原始字符串可能会稍微快一点或慢一点,但几乎可以肯定差异太小而无法注意到。

原始字符串的目的不是为了提高编译速度。这是为了让您以更易读的方式编写包含大量特殊字符(如反斜杠和引号)的字符串文字,而无需插入大量额外的反斜杠进行转义。

使用普通的字符串文字,除非你的字符串需要大量转义,这使得它在源代码中看起来很尴尬。仅在这些情况下使用原始字符串文字。

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2017-04-25
    • 2013-02-12
    • 1970-01-01
    • 2021-03-01
    • 2017-07-09
    相关资源
    最近更新 更多