簡體   English   中英

int&a和int&a之間有區別嗎?

[英]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&bint & b

我也通過一個簡單的類測試了這種行為。 通常,是否將“&”號放置在相對於類型和標識符的位置上是否重要? 謝謝。

不,除了編碼樣式外,沒有其他區別。 我認為有關編碼樣式的主要論點是該聲明:

int& a, b;

聲明aint&bint

在類似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 &aint& a都沒有關系。 但是,為避免混淆, &*應該與變量而不是類型相關聯。

這沒有什么區別,因為c / c ++ / java這些語言對空間不敏感。

它以哪種方式對編譯器沒有影響。 正確的是代碼風格。

暫無
暫無

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

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