[英]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.