Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ int&;a及综合及;A._C++_Reference - Fatal编程技术网

C++ int&;a及综合及;A.

C++ int&;a及综合及;A.,c++,reference,C++,Reference,此代码: int a = 5; int& b = a; b = 7; cout << a; inta=5; int&b=a; b=7; coutNo,除了编码方式外,两者完全没有区别。我认为关于编码风格的主要论点是: int& a, b; 将a声明为int&和b声明为int这对编译器的编写方式没有影响。正确与否取决于代码风格。在类似C语言中,空白大部分并不重要 列出的所有版本解析为相同的三个标记: int & b 因此,它们对编译器的意义相同 只有当空格分隔两

此代码:

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

coutNo,除了编码方式外,两者完全没有区别。我认为关于编码风格的主要论点是:

int& a, b;

a
声明为
int&
b
声明为
int

这对编译器的编写方式没有影响。正确与否取决于代码风格。

在类似C语言中,空白大部分并不重要

列出的所有版本解析为相同的三个标记:

  • int
  • &
  • b
因此,它们对编译器的意义相同

只有当空格分隔两个字母数字标记时,空格才有意义。即使如此,只要有空格,空格的数量和类型也不重要。但是任何一种标点符号总是与字母数字分开,不需要空格

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

using namespace std;int a=5;int&b=a;b=7;cout<<a;
使用名称空间std;INTA=5;int&b=a;b=7;库特
一般来说,符号与是否相对于类型和标识符放置有关系吗

发布的示例并不重要,但在某些情况下确实如此:

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

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

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

这是两种功能等效的声明:

int& a; // & associated with type
int &a; // & associated with variable
&
*
与类型名称关联,反映了程序员希望有一个单独的指针类型。然而,将
&
*
与类型名而不是变量相关联的困难在于,根据正式的
C++
语法,
&
*
都不是分布在变量列表上的。因此,很容易制造误导性声明。例如,以下声明创建一个而不是两个整数引用

int& a, b;
这里,
b
被声明为整数(不是整数引用),因为在声明中使用时,
&
(或
*
)链接到单个变量 它在前面,而不是后面的类型。这个声明的问题是,从视觉上看,a和b似乎都是引用类型,尽管只有
a
是引用,因此视觉上的混淆不仅误导了
C++
新手程序员,偶尔也会误导有经验的程序员


无论您是为
C++
编译器编写
int&a
还是
int&a
,这都无关紧要。但是,为了避免混淆,
&
*
应该与变量关联,而不是与类型关联。

另一个重要的问题是宏定义。如果函数名和后面的开括号之间没有空格,则宏与函数类似。如果有,则括号是替换列表的一部分。@Ryan我猜int&a,b;将给出编译错误,因为引用a已声明但未初始化。@Shailesh:对,它将是
int&a=foo,b=bar