【发布时间】:2013-09-04 23:57:48
【问题描述】:
我读了一个关于两者区别的问题:
const char*
和
const char[]
有一段时间,我认为数组只是指针的语法糖。 但是有些事情困扰着我,我有一段类似于以下的代码:
namespace SomeNamespace {
const char* str = { 'b', 'l', 'a', 'h' };
}
我明白了,错误:缩放器对象“str”在初始化程序中需要一个元素。 所以,我尝试了这个:
namespace SomeNamespace {
const char str[] = { 'b', 'l', 'a', 'h' };
}
它起作用了,起初我认为这可能与应用了额外操作有关 当它是一个 const char* 时,GCC 从不喜欢在函数之外执行操作(无论如何这都是不好的做法),但错误似乎并不表明如此。 然而在:
void Func() {
const char* str = { 'b', 'l', 'a', 'h' };
}
它按预期编译得很好。有谁知道为什么会这样?
x86_64/i686-nacl-gcc 4(.1.4?) pepper 19 工具链(基本上是 GCC)。
【问题讨论】:
-
一个是数组,一个是指针。
-
...如果您认为它们相同,请三思。
-
@WhozCraig 就像我说的,我读了一个问题,解释它们是不同的(以前我认为数组是指针的语法糖,基本上是重载运算符的集合)。
-
最后一个 sn-p 也 not 在我的 clang 上编译(Apple LLVM 4.2,clang-425.0.28)所以我不知道你的怎么了。 (错误:“缩放器初始化程序中的多余元素”),但我没想到会这样。
-
我建议您参考 C 常见问题解答:c-faq.com/aryptr/aryptrequiv.html
标签: c++ gcc c++11 char google-nativeclient