【问题标题】:Choose default type and encoding for C++ string literals at compile time在编译时为 C++ 字符串文字选择默认类型和编码
【发布时间】:2013-08-05 12:13:22
【问题描述】:

C++11 为 UTF-8、16 和 32 引入了带有 u8uU 前缀的新字符串文字,但我必须硬编码我想使用哪一个。我正在寻找一种方法来选择我想在编译时使用的编码(类似于 typedef 的工作方式)。

用户定义的字符串文字似乎没有帮助,因为它们适用于指定编码的字符串。

我曾在 C++11 之前的代码中看到使用短宏(例如 L("string"))在 "string"L"string" 之间进行选择,但我个人觉得这很丑。

是否可以巧妙地选择默认类型和编码,还是必须使用宏选项?

【问题讨论】:

  • 是的,您需要一个宏,因为您需要制作令牌。我个人认为宏本身并不难看,但需要它。
  • 这与字符串文字编码无关,而主要与您的应用程序默认使用的字符串类型有关。是的,除了使用宏(至少在编译时)之外,您没有其他选择
  • 这也是关于编码的,默认情况下""是一个实现定义的单字节编码而不是UTF-8,两者都使用char类型

标签: c++ c++11 unicode character-encoding string-literals


【解决方案1】:

不幸的是,这个问题的解决方案是使用宏。尽管@Nadim Farhat 指出您可以使用 gcc 进行一定程度的选择,但它绝不是一个可移植的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多