2014-06-09 205 views
-1

所以,我對C++並不是很有信心,因爲我大部分來自java世界,但現在我必須用C++去。奇怪的C++ FOR循環

我一直在尋找一個tutorial for some 3D model stuff,和整個這個for循環傳來:

FOR(i, scene->mNumMeshes) 
    { //... 

,我根本不明白。 其實我理解它應該做什麼,但它不適用於我,我不明白它應該如何工作。

本教程適用於Visual Studio 2008,我在VS2012上。 當然我知道「我」應該在某處定義,但首先我的VS抱怨大寫「FOR」而不是「for」。當我將它改爲「for」並將「i」定義爲unsigned int時,VS只是抱怨有「;」失蹤。

由於谷歌真的沒有幫助,有人可以請解釋給我嗎? 或者它只是一個錯誤的教程?但我真的不這麼認爲......

+4

請在宏的教程中查看。然後擺脫那個宏。一個緊密的選擇是'for(int i:boost :: irange(scene-> mNumMeshes)'。 – chris

+1

_strange(至少對我來說)for loop_。這不是一個好標題 – rpax

+0

好吧,從技術上說,你不能稱它爲''for循環在C++標準方面,它可能真的是任何東西 – luk32

回答

4

這是幾乎可以肯定這種形式的宏:

#define FOR(var_name, end_val) for (int var_name = 0 ; var_name != (end_val) ; ++var_name) 

或某事非常接近這一點。這個想法是通過引入這種替代語法來縮短代碼。這些宏在速度編程競賽中尤爲流行,其中節省幾秒鐘很重要。我強烈建議不要在生產環境中採用這種性質的捷徑,因爲它們的可讀性遠比幫助「可寫性」更大。

+0

我推薦*爲*這樣的快捷方式,但geez,使用編輯器代碼片段來製作真正的代碼 – chris

+0

@chris編輯器片段是一種完全不同的快捷方式:) – dasblinkenlight

+0

@chris:This might screw如果你正在用C++ 11基於範圍的循環IMO讀取代碼,那麼你就起來了。 – Mario

3

大寫字母已經暗示了這是某種預處理宏。它很可能在你的教程的早些時候列出。

例如,它可以被定義爲這樣的事:

#define FOR(iterator, limit) for(iterator = 0; iterator < (limit); ++iterator) 

所以,在你的榜樣,這將擴大到該行:

for(i = 0; i < scene->mNumMeshes; ++i) 

請記住,這是潛在的誤導和/或難以閱讀,並可能會引入錯誤。它不會讓你的代碼更具可讀性。