簡體   English   中英

帶括號的新運算符“(”,“)”而不是括號“[”,“]”

[英]new operator with parentheses “(”, “)” instead of brackets “[”, “]”

我在代碼中發現了一個瘋狂的錯誤。

我寫了以下這一行:

GLfloat* points = new GLfloat(1024);

而不是

GLfloat* points = new GLfloat[1024];

我才注意到它。 在我發現錯誤之前,我的代碼編譯並運行了幾次。 我意識到這是僥幸的,但我的問題是我最初的做法是什么?

我注意到它看起來有點像使用指向已分配內存的指針創建一個類。 它是否在堆上創建單個GLfloat,初始值為1024.0 如果這是真的,為什么它是有效的語法? (GLfloat不是一個類,是嗎?)

是的,你將創建一個單一GLFloat上初始化為1024.0堆。 您可以使用與類相同的語法初始化基元。 例如

int i(10);

將在堆棧上創建一個初始化為10的int。

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

GLfloat* points = new GLfloat(1024);

相當於:

float* points = new float(1024);

其中分配一個浮點數並將其初始化為1024.0並將其地址分配給指針points

我最初的線路是做什么的?

 GLfloat* points = new GLfloat(1024);

讓我們嘗試用int替換GLfloat ,您將看到如果GLFloat是類似於intfloat的類型,那么您將具有以下內容:

int * points = new int(1024);

上面的語句意味着您正在創建一個指向int的指針,初始值為1024 所以你的情況,這意味着創建一個指針points與類型是可變GLfloat和初始值1024

它相當於在精簡版中編寫以下內容:

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

請參閱此處以獲取更多解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM