繁体   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