绑定到字符串文字的索引运算符
Index operator bound to a string literal
所以我决定进行实验,完全出于随机性。
我发现了这个:
"Hello World"[1]
实际上是在处理第一个视图,结果是 'e'
即使:
- 直到碰巧出现在我的代码中,我才在任何地方遇到过这种情况
- 似乎在语义上存在争议(或至少相当可疑)
- 无法在 Internet 上找到任何关于此正字符串文字数组索引的信息(可能是在错误的上下文中搜索?)
这实际上是允许的,面对 "standards" 有保证的明确定义的行为吗?
"Hello World"[1]
完全有效。字符串文字是 N
个字符的数组类型。 "Hello World"
的类型是12个char
的数组(即char[12]
)。
这在语义上是正确的。 "Hello World"[1]
等同于 *("Hello World" + 1)
。在此表达式中,字符串 "Hello World"
将被转换为指向其第一个元素的指针。因此,("Hello World" + 1)
是字符串"Hello World"
.
的第二个元素的地址
所以我决定进行实验,完全出于随机性。 我发现了这个:
"Hello World"[1]
实际上是在处理第一个视图,结果是 'e'
即使:
- 直到碰巧出现在我的代码中,我才在任何地方遇到过这种情况
- 似乎在语义上存在争议(或至少相当可疑)
- 无法在 Internet 上找到任何关于此正字符串文字数组索引的信息(可能是在错误的上下文中搜索?)
这实际上是允许的,面对 "standards" 有保证的明确定义的行为吗?
"Hello World"[1]
完全有效。字符串文字是 N
个字符的数组类型。 "Hello World"
的类型是12个char
的数组(即char[12]
)。
这在语义上是正确的。 "Hello World"[1]
等同于 *("Hello World" + 1)
。在此表达式中,字符串 "Hello World"
将被转换为指向其第一个元素的指针。因此,("Hello World" + 1)
是字符串"Hello World"
.