次の違いに関する質問を読みました。
const char*
と
const char[]
しばらくの間、私は配列がポインターの構文糖衣にすぎないと考えていました。しかし、何かが私を悩ませています。次のようなコードがあります。
namespace SomeNamespace {
const char* str = { 'b', 'l', 'a', 'h' };
}
エラー: スケーラー オブジェクト 'str' には初期化子に 1 つの要素が必要です。だから、私はこれを試しました:
namespace SomeNamespace {
const char str[] = { 'b', 'l', 'a', 'h' };
}
それはうまくいきました。最初は、これは const char* の場合に追加の操作が適用されるという事実に関係しているのではないかと考えていました。しかし、エラーはそう示唆していないようです。ただし、次の場合:
void Func() {
const char* str = { 'b', 'l', 'a', 'h' };
}
期待どおりにうまくコンパイルされます。なぜこれがそうなのか、誰にも分かりますか?
x86_64/i686-nacl-gcc 4(.1.4?) pepper 19 ツール - チェーン (基本的に GCC)。