Значения по умолчанию для аргументов массива

Немного поиграем с 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'}, чтобы вызвать это несоответствие. Приветствуется любое понимание!

13
задан Dev Kanchen 17 August 2011 в 13:31
поделиться