2012-03-02 74 views
0

什麼是變量聲明的區別:(С++指針)VAR聲明之間的區別

//version 1 
MyClass* myVar = [[MyClass alloc] init]; 
//version 2 
MyClass * myVar = [[MyClass alloc] init]; 
//version 3 
MyClass *myVar = [[MyClass alloc] init]; 

將與每個版本的對象myVar發生什麼樣的變化?

+0

根本沒有區別!因爲C++不考慮空白格式 – 2012-03-02 11:41:00

回答

2

純粹的文體,沒有區別。在C語言中,開發商往往選擇後者的風格,也許原因很簡單,它使聲明多個指針更爲清晰:

int *ptr1, *ptr2; 
... 

這也是原來的,最受歡迎的作家的風格當C出來,如同Kernighan和Ritchie公司的C編程語言。丹尼斯·裏奇,順便說一句,創建C.

然而,很多現代C++的開發人員,包括斯特勞斯本人(C++的創造者),傾向於首先約定:

int* ptr = ...; 

爲的理由偏好可能歸結爲幾件事情:

  1. 在C++中,我們有模板,需要我們自己指定類型。 vector<int*>似乎更加直截了當地強調int*作爲單一類型而不是vector<int *>或某些其他變體。

  2. 當遵守旨在促進安全設計的C++編碼標準時,我們不會發現自己想要一次性定義多個變量,因爲我們通常希望在可以有意義地初始化時定義它們(避免潛在的錯誤通過限制範圍並立即初始化它們)。 *

    • 這是從哪兒需要每一個變量,在這導致許多C開發人員有在同一時間宣佈多的頻繁習慣範圍的頂部被宣佈Ç很大的不同。
2

任何聲明MyClass* myVarMyClass * myVarMyClass *myVar之間沒有區別:它是程序員偏好。

許多程序員喜歡MyClass *myVar,因爲它可以防止做以下簡單的錯誤(如果程序員爲了兩個指針申報MyClass):

MyClass* myVar, myVar2; 

其中myVar2不是MyClass*,但MyClass

+0

請注意,聲明一個「MyClass」類型的變量(假設OP在將問題標記爲Obj-C時是正確的)是無效的,並且會創建一個編譯器錯誤。 – 2012-03-03 17:10:53

1

還有就是你的三點建議之間不存在語義差別。

從本質上講,當解析代碼文件時,預處理器將所有東西都拆分爲標記,編譯過程的所有後續過程都只能處理這些標記。因此,令牌之間的間距 完全被忽略。

簡單指針聲明的語法(只聲明瞭一個元素並且沒有初始化)由三個標記組成:一個類型說明符,一個星號(表示該變量是一個指針),最後是一個標識符。因此,你可以在這三者之間有任意數量的空白,根本不需要改變語義。

人們選擇某種方式而不是另一種方式的原因與風格以及它表達的意圖有關。

MyClass* myVar表明myVar的類型是MyClassMyClass *myVar說明指針標記屬於myVar變量。

因此,如果您決定在單個語句中聲明變量列表,則第二種選擇是特別推薦的。如MyClass myVar, *myPointerToVar

另一個不錯的選擇是始終使用MyClass* myVar變體,並且從不做出一個聲明列出幾個變量,其中一些是指針。

相關問題