2013-12-10 121 views
0

我一直在學習C++引用變量語法順序,我開始不知道,當你聲明的指針或引用(和常量):指針和C++

int *a; 
int* a; 
char &b; 
char& b; 
const char c; 
char const c; 

是爲a, bc相當於雙方的聲明?他們被允許嗎?

Thnx任何幫助! :)

+2

yes(填充到這裏) –

+0

+1 @LuchianGrigore thnx :) – jjepsuomi

+1

你的意思是「const char c VS char const c」或「const char * c VS char * const c」? – Yousf

回答

4

是的,它們是相同的。

一般規則是,如果const位於類型名稱旁邊,那麼類型是常量。如果它緊挨着一個指針,那麼它就是不變的指針。如果它在兩者旁邊,則它綁定到該類型。因此:

char const a; // constant character 
char const *b; // non constant pointer to constant data 
char * const c; // constant pointer to non constant data 
char const * const d; constant pointer to constant data 

引用默認情況下是常量,因爲它們在初始化後無法更改爲引用其他任何內容。使用上述規則意味着當const被應用於引用時,它意味着類型/數據是恆定的。

+1

有一個很好的一般規則,如何閱讀定義:從標識符名稱開始,從標識符(最接近的符號首先)讀取右側的所有符號,然後在左側讀取符號。例如。 「char const * c []」的意思是「c是一個指向const char的指針數組」 – dousin

+0

+1 @dousin Nice one! :) thnx – jjepsuomi

+1

這不是'const'的一般規則(並且不涵蓋所有的情況)。 const的一般規則是修改左邊的內容,只有在左邊什麼都不修改的情況下才能修改右邊的內容。 –

2

「YES」是對您的問題的答案。 :D 你說得對!

+1

+1 Thnx對你的幫助; D – jjepsuomi

1

是的,嘿是相同的,儘管引用和指針,以及它們的常量並不相同。

就像一個樣式問題,我試圖保留「&」和「*」的變量。許多程序員都有這樣的習慣(好或壞是其他職位的辯論主題)在同一行上聲明多個相同類型的變量。

例如:

// Creates three pointers to FruitClass instances. 
FruitClass *apple, *lemon, *grapes; 

如果你陷入把「&」或習慣「*」與類型,你可能會鍵入:

// Creates a pointer to a FruitClass instance and two FruitClass instances. 
// This is probably **not** what you wanted to do. 
// And if it is, put these on separate lines because everybody will ask 
// if you intended to do this and waste your/their time. 
FruitClass* apple, lemon, grapes; 

這些都是很有不同的東西。

這是一個小問題,如果你以第二種方式代替第一種方式,宇宙就不會自毀。只要小心編譯器何時開始吠叫(當你嘗試將它用作參考/指針而不是它時)。

它也是我所使用的編碼標準的一部分。如果您使用的是標準,請務必遵守,避免代碼檢查過程中浪費時間和沮喪(因爲如果您有標準,某人將正式或非正式地檢查代碼)。

+0

+1 @Nlinelinearldeas感謝你的幫助:)你能解釋一下你給出的例子之間的區別嗎? :) – jjepsuomi

+1

我給代碼添加了一些註釋。這是你在找什麼? – FuzzyBunnySlippers

+0

+1 @Nonlinearldeas yes :)謝謝 – jjepsuomi