Sou*_*a B 5 c++ string character-encoding string-literals
C++ 中无前缀字符串的编码是什么?例如,所有字符串文字在 Java 中都被解析并存储为 UTF-16,在 Python3 中则被解析为 UTF-8。我猜想 C++ 文字就是这种情况u8""。但我不清楚像 之类的普通文字""。
以下代码的输出应该是什么?
#include <iostream>
#include <iomanip>
int main() {
auto c = "Hello, World!";
while(*c) {
std::cout << std::hex << (unsigned int){*c++} << " ";
}
}
Run Code Online (Sandbox Code Playgroud)
当我在我的机器上运行它时,它会给出以下输出:
48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21
Run Code Online (Sandbox Code Playgroud)
但这有保证吗?字符串文字的 Cppreference 页面表示普通字符串文字中的字符来自翻译字符集,翻译字符集指出:
翻译字符集由以下元素组成:
- 由 ISO/IEC 10646 命名的每个字符,由其唯一的 UCS 标量值标识,以及
- 每个 UCS 标量值的不同字符,其中未分配命名字符。
从这个定义来看,翻译字符集似乎是指 Unicode(或其超集)。那么除了显性之外,""和之间没有区别吗?u8""
假设如果我希望我的字符串采用 EBCDIC 编码(只是作为练习),那么在 C++ 中实现它的正确方法是什么?
编辑:字符串文字的链接 Cppreference 页面确实说它是实现定义的。这是否意味着我应该避免使用它们?
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |