【发布时间】:2011-01-31 01:32:21
【问题描述】:
我最近被一个微妙的虫子咬了。
char ** int2str = {
"zero", // 0
"one", // 1
"two" // 2
"three",// 3
nullptr };
assert( int2str[1] == std::string("one") ); // passes
assert( int2str[2] == std::string("two") ); // fails
如果你有神一样的代码审查能力,你会注意到我忘记了"two" 后面的,。
在为找到该错误付出了相当大的努力之后,我不得不问为什么会有人想要这种行为?
我知道这对宏魔法有多大用处,但为什么这是现代语言(如 python)的“功能”?
您曾经在生产代码中使用过字符串文字连接吗?
【问题讨论】:
-
我有一个这样的错误,但我在不同的行上有数字,缺少逗号后的行有一个负号,所以我没有收到编译错误。
-
我猜是 C++0x' 用户定义的文字:public.research.att.com/~bs/C++0xFAQ.html#UD-literals
-
本着同样的精神,如果您忘记了字符串文字后面的
_s会发生什么? -
我能够在 C 和 C++ 以及 Python 中挖掘此功能的实际原理,详细信息在下面的答案中。
标签: python c++ c d string-literals