Могу ли я действительно инициализировать массив с круглыми скобками? - PullRequest
6 голосов
/ 11 ноября 2011

Иногда я делал опечатку в одном месте кода моей программы:

int a = 10;  
char* b = new char(a);

Ошибка очевидна: я написал () вместо []. Странная вещь ... код скомпилирован нормально, он работает в отладчике нормально. Но скомпилированный .exe вне отладчика завис через мгновение после выполнения функции с этими строками.

Действительно ли вторая строка кода законна? И если это так, что это значит для компилятора?

Ответы [ 3 ]

10 голосов
/ 11 ноября 2011

Это один символ с числовым значением a, в данном случае 10.Вы знаете, указатели указывают не только на массивы.

5 голосов
/ 11 ноября 2011

Вы выделяете сингл char и присваиваете ему значение от a.Это вовсе не выделение массива.

Это то же самое, что вызов конструктора в выражении new для любого другого типа:

std::string* s = new std::string("foo");
int* i = new int(10);
std::vector<std::string>* v = new std::vector<std::string>(5, "foo");
2 голосов
/ 11 ноября 2011

char t(a) создает локальный символ, инициализированный значением a.
new char (a) создает динамически назначенный символ, инициализированный значением a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...