【发布时间】:2010-05-14 20:39:47
【问题描述】:
我发现了this 关于C 预处理器应如何处理字符串文字连接(第6 阶段)。但是,我找不到任何关于在 C++ 中如何处理的信息(C++ 是否使用 C 预处理器?)。
我问的原因是我有以下几点:
const char * Foo::encoding = "\0" "1234567890\0abcdefg";
其中encoding 是类Foo 的静态成员。如果没有连接的可用性,我将无法编写这样的字符序列。
const char * Foo::encoding = "\01234567890\0abcdefg";
由于\012 的解释方式完全不同。
我无法访问多个平台,我很好奇我应该对以上内容始终正确处理有多大信心 - 即我将始终收到{ 0, '1', '2', '3', ... }
【问题讨论】:
-
只是出于好奇 - 你为什么使用 char* 而不是 std::string?
-
@David Relihan:为什么会有人使用
std::string作为不可变字符串常量?甚至没有考虑到客户端代码规范(如某些 API)可能需要char *。 -
@AndreyT:“为什么会有人使用 std::string 作为不可变字符串常量?”因为他们想按字典顺序比较字符串(并且不想考虑它们是常量还是其他)?
-
你可以写成
"\000123..."。一个数字转义序列最多可以有三个八进制数字。第四个数字不包含在转义序列中;这是一个普通的角色。 -
@Rob:我没想到。不错的解决方案:)
标签: c++ concatenation c-preprocessor