Почему g ++ компилирует это? - PullRequest
0 голосов
/ 15 марта 2009

Недавно, очень уставший, я написал следующий код:

GLfloat* array = new GLfloat(x * y * z);

Что, конечно, должно было быть:

GLfloat* array = new GLfloat[x * y * z];

(обратите внимание на квадратные скобки, а не на круглые скобки.)

Насколько я знаю, первая форма недействительна, но g ++ ее скомпилировал. Конечно, он выплюнул совершенно непонятный сегмент, но он скомпилирован.

Почему?

Ответы [ 4 ]

15 голосов
/ 15 марта 2009
GLfloat* array = new GLfloat(x * y * z);

Создает указатель с именем array на объект типа GLfloat со значением x * y * z.

9 голосов
/ 15 марта 2009

Ну, результат new T() равен T*, поэтому new GLFloat вернет GLFloat * Пока x*y*z допустимо для передачи конструктору GLFloat, это допустимый код.

7 голосов
/ 15 марта 2009

Это то же самое, что и:

int * p = new int(42);
2 голосов
/ 15 марта 2009

Ну, первое выражение - это указатель на GLfloat со значением (x y z), что вполне допустимо.

...