2009-03-15 2 views
0

В последнее время, после того, как очень устали, я написал следующий код:Почему g ++ компилирует это?

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

который, конечно же должны были быть: (. Обратите внимание на квадратные скобки, в отличие от круглых скобок)

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

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

Почему?

ответ

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

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

2

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

9

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

7

Это же такие вещи, как:

int * p = new int(42); 
Смежные вопросы