在C++引用中,&符号的语义准确位置是什么

mic*_*c_e 11 c++ reference

非常常见的是,声明指针的语义准确方法是

int *x;
Run Code Online (Sandbox Code Playgroud)

代替

int* x;
Run Code Online (Sandbox Code Playgroud)

这是因为C看作*x是一个int,而不是x一个int指针.

这很容易证明

int* a, b;
Run Code Online (Sandbox Code Playgroud)

其中a是int指针,而bint是int.

stackoverflow.com上至少有5个重复的问题,讨论这个问题的指针.但是参考文献怎么样?

Ale*_*sco 8

Bjarne Stroustrup说:

一个typical C programmerint *p; 并在解释中*p is what is the int强调语法,并可能指向C(和C ++)声明语法来证明样式的正确性。实际上,*绑定到语法中的名称p。

一个typical C++ programmerint* p;并解释它p is a pointer to an int强调类型。实际上,p的类型为int *。我显然更喜欢这种强调,并认为它对于正确使用C ++的更高级部分非常重要。

在声明指针变量或参数时,可以在类型或变量名称旁边放置星号(或号)。

最重要的事情是在单个文件中一致地执行此操作。

// These are fine, space preceding.
char *c;
const int &i;

// These are fine, space following.
char* c;
const int& i;
Run Code Online (Sandbox Code Playgroud)


fre*_*low 7

多亏了“模板类型定义”,您可以以(可以说)更好的方式声明多个引用:

template<typename T> using ref = T&;
int a, b;
ref<int> ar = a, br = b;
Run Code Online (Sandbox Code Playgroud)


mic*_*c_e 5

在研究这个问题时,我已经找到了答案:

&要写入的需求就像*

演示代码类似于指针演示代码:

int main() {
    int a = 0;
    int b = 1;

    int& ar = a, br = b;

    br = 2;

    return b;
}
Run Code Online (Sandbox Code Playgroud)

这将返回1,这意味着它ar是一个int引用,而br只是一个整数。

  • 许多样式指南建议每个声明一个变量。尽管可能不止一种,但在指针和引用声明方面,可读性得到了提高。 (5认同)
  • @ThomasMatthews:当然。我绝不鼓励在一个语句中实际声明多个指针、引用甚至变量。这只是“C++”内部工作原理的演示。 (2认同)