int& int之间有区别吗? a和int& a?

时间:2011-12-30 02:49:23

标签: c++ reference

此代码:

int a = 5;
int& b = a;
b = 7;
cout << a;

打印出7,用int& b替换int &b也打印出7。

事实上,int&bint & b也是如此。

我也用一个简单的类来测试这种行为。一般来说,是否相对于类型和标识符放置&符号是否重要?感谢。

6 个答案:

答案 0 :(得分:17)

不,除了编码风格之外绝对没有区别。我认为关于编码风格的主要论点是这个声明:

int& a, b;

a声明为int&,将b声明为int

答案 1 :(得分:9)

在类C语言中,空白几乎无关紧要。

您列出的所有版本都解析为相同的三个令牌:

  • int
  • &
  • b

所以它们对编译器意味着相同。

空白的唯一重要时刻是它分离两个字母数字标记,即使这样,只要有一些空格的数量和类型无关紧要。但任何类型的标点符号总是成为与字母数字相对应的单独标记,不需要空格。

因此,您的代码可以缩短为:

using namespace std;int a=5;int&b=a;b=7;cout<<a;

需要剩下的空白。

答案 2 :(得分:6)

  

一般情况下,是否相对于类型和标识符放置&符号是否重要?

示例发布并不重要,但有些情况可以:

int & a, b;    // b is not a ref
int const * a; // pointer to const int
int * const a; // const pointer to int

与往常一样,空白并不重要。

答案 3 :(得分:2)

这是两个功能相同的声明:

int& a; // & associated with type
int &a; // & associated with variable

&*与类型名称相关联反映了程序员拥有单独指针类型的愿望。但是,根据正式的&语法,将*C++与类型名称而不是变量相关联的难度不是&也不是* {1}}是对变量列表的分配。因此,容易产生误导性的声明。例如,以下声明创建一个而不是两个整数引用。

int& a, b;

这里,b被声明为整数(不是整数引用),因为当在声明中使用时,&(或*)链接到单个变量 它先于,而不是它所遵循的类型。这个声明的问题在于,a和b看起来似乎都是引用类型,即使只有a是引用,因此视觉混淆不仅会误导新手C++程序员,而且偶尔会遇到程序员也是。

是否为int &a编译器编写int& aC++并不重要。但是,为避免混淆,&*应与变量相关联,而不是类型。

答案 4 :(得分:1)

它对编译器的编写方式没有任何影响。哪个是正确的是代码风格问题。

答案 5 :(得分:1)

它没有任何区别,因为c / c ++ / java这些语言对空间不敏感。