带括号的新运算符“(”,“)”而不是括号“[”,“]”

时间:2014-08-22 13:50:15

标签: c++

我在代码中发现了一个疯狂的错误。

我写了以下这一行:

GLfloat* points = new GLfloat(1024);

而不是

GLfloat* points = new GLfloat[1024];

我只是注意到了它。在我发现错误之前,我的代码编译并运行了几次。我意识到这是侥幸,但我的问题是我最初的做法是什么?

我注意到它看起来有点像使用指向已分配内存的指针创建一个类。它是否在堆上创建了一个初始值为1024.0的GLfloat?如果这是真的,为什么它是有效的语法? (GLfloat不是一个类,是吗?)

3 个答案:

答案 0 :(得分:7)

是的,您正在初始化为1024.0的堆上创建一个GLFloat。您可以使用与类相同的语法初始化基元。 e.g。

int i(10);

将在堆栈上创建一个初始化为10的int。

答案 1 :(得分:6)

GLfloatfloat的OpenGL别名(即typedef float GLfloat;)。因此代码:

GLfloat* points = new GLfloat(1024);

相当于:

float* points = new float(1024);

分配浮点数并将其初始化为1024.0并将其地址分配给指针points

答案 2 :(得分:3)

  
    

我最初的路线是什么?

  
 GLfloat* points = new GLfloat(1024);

让我们尝试将GLfloat替换为int,您会看到如果GLFloat是类似于intfloat的类型,那么您将会有以下内容:

int * points = new int(1024);

上述声明表示您正在创建指向int的指针,其初始值为1024。因此,在您的情况下,这意味着为类型为points且初始值为GLfloat的变量创建指针1024

相当于在精简版中编写以下内容:

int * points = new int;
*points = 1024;

有关详细说明,请参阅here