Я прочитал вопрос о разнице между:
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?) перец 19 инструментальная цепочка (в основном GCC).