{1,2,3}
- очень ограниченный синтаксис, специфичный для инициализации структуры POD (очевидно, массив в стиле C тоже считался одним).Единственное, что вы можете сделать, это как int x[] = {1,2,3};
или int x[3] = {1,2,3};
, но вы не можете ни int x[3]; x={1,2,3};
, ни использовать {1,2,3}
в любом другом месте.
Если вы делаете C ++, этопредпочтительнее использовать что-то вроде std :: vector вместо массивов в стиле C, так как они считаются опасными - например, вы не можете знать их размер и должны удалять их с delete[]
, а не с нормальным delete
.С std :: vector у вас все равно будет та же проблема инициализации.Если бы я часто использовал такую инициализацию, я бы, скорее всего, создал бы макрос, назначающий фиктивную локальную переменную, а затем копировал бы память по назначению.
РЕДАКТИРОВАТЬ: Вы также можете сделать это такпредпочтительно):
int* NewArray(int v1, int v2, int v3) { /* allocate and initialize */ }
int* p = NewArray(1,2,3);
но тогда вам придется переопределить функцию с другим количеством аргументов или использовать va_arg, что, опять же, небезопасно.
EDIT2: Мой ответ толькодействительно для C ++ 03, так как другие люди упоминали, что C ++ 0x имеет некоторые улучшения в этом.