[英]What is the difference between “const int& jj” and “int& const jj”?
[英]Is there a difference between int& a and int &a?
這段代碼:
int a = 5;
int& b = a;
b = 7;
cout << a;
打印出7,用int& b
替換int &b
也打印出7。
實際上, int&b
和int & b
。
我也通過一個簡單的類測試了這種行為。 通常,是否將“&”號放置在相對於類型和標識符的位置上是否重要? 謝謝。
不,除了編碼樣式外,沒有其他區別。 我認為有關編碼樣式的主要論點是該聲明:
int& a, b;
聲明a
為int&
和b
為int
。
在類似C的語言中,空格基本上無關緊要。
您列出的所有版本都解析為相同的三個標記:
int
&
b
因此它們對編譯器的意義相同。
空格唯一重要的時間是當它分隔兩個字母數字標記時,即使有空格,空格的數量和類型也無關緊要。 但是,任何類型的標點符號始終會成為與字母數字符號分開的標記,不需要空格。
因此,您的代碼可能會變得很短:
using namespace std;int a=5;int&b=a;b=7;cout<<a;
剩余的空格是必需的。
通常,是否將“&”號放置在相對於類型和標識符的位置上是否重要?
發布的示例並不重要,但是在某些情況下確實如此:
int & a, b; // b is not a ref
int const * a; // pointer to const int
int * const a; // const pointer to int
與往常一樣,空格並不重要。
這是兩個功能上等效的聲明:
int& a; // & associated with type
int &a; // & associated with variable
將&
或*
與類型名稱相關聯反映了程序員希望擁有一個單獨的指針類型。 但是,將&
或*
與類型名稱而不是變量相關聯的困難在於,根據正式的C++
語法, &
或*
都不在變量列表中分布。 因此,容易產生誤導性聲明。 例如,以下聲明創建一個而不是兩個整數引用。
int& a, b;
在這里, b
被聲明為整數(不是整數引用),因為在聲明中將&
(或*
)鏈接到它之前的單個變量,而不是后面的類型。 該聲明的問題在於,盡管a和b看起來都像是引用類型,即使只有a
是引用,所以視覺上的混亂不僅誤導了C++
初學者,而且偶爾也會使有經驗的程序員誤解。
是否為C++
編譯器編寫int &a
或int& a
都沒有關系。 但是,為避免混淆, &
和*
應該與變量而不是類型相關聯。
這沒有什么區別,因為c / c ++ / java這些語言對空間不敏感。
它以哪種方式對編譯器沒有影響。 正確的是代碼風格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.