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

use*_*501 7 c++

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

我写了以下这一行:

GLfloat* points = new GLfloat(1024);
Run Code Online (Sandbox Code Playgroud)

而不是

GLfloat* points = new GLfloat[1024];
Run Code Online (Sandbox Code Playgroud)

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

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

Fer*_*cio 7

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

int i(10);
Run Code Online (Sandbox Code Playgroud)

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


101*_*010 6

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

GLfloat* points = new GLfloat(1024);
Run Code Online (Sandbox Code Playgroud)

相当于:

float* points = new float(1024);
Run Code Online (Sandbox Code Playgroud)

其中分配一个浮点数1024.0并将其初始化并将其地址分配给指针points.


tao*_*ocp 5

我原来的线路是做什么的?

 GLfloat* points = new GLfloat(1024);
Run Code Online (Sandbox Code Playgroud)

让我们尝试替换GLfloatint,您会看到 if是类似于orGLFloat的类型,那么您将得到以下结果:intfloat

int * points = new int(1024);
Run Code Online (Sandbox Code Playgroud)

上面的语句意味着您正在创建一个指向 的指针,int其初始值为1024。因此,在您的情况下,这意味着创建一个points指向类型为GLfloat、初始值为 的变量的指针1024

相当于将以下内容写成精简版本:

int * points = new int;
*points = 1024;
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解更多说明。