Немного поиграем с C ++. Что я действительно хочу сделать, так это иметь возможность настроить функцию со значениями по умолчанию, определенными для аргумента массива или указателя. Чтобы не усложнять задачу, давайте просто воспользуемся массивом. Примерно так:
void ExperimentA (char a [3] = {'a', 'b', 'c'});
Компилятор (LLVM GCC 4.2 с GNU99) жалуется на «Ожидаемое выражение». Это довольно глупо, но мне сказали коллеги, что это происходит из-за того, что «значение», которое я пытаюсь присвоить, выделяется статически, тогда как переменная, которой я пытаюсь присвоить его ( a [3]
) автоматически.
Но я не совсем уверен, так ли это, так как я могу сделать это:
void ExperimentB (char a [3] = "abc");
И компилятор просто предупреждает меня, что преобразование строкового литерала в char * не рекомендуется.
Я не понимаю, чем "abc" принципиально отличается от {'a', 'b', 'c'}, чтобы вызвать это несоответствие. Приветствуется любое понимание!