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

时间:2014-03-31 16:22:32

标签: c++ reference

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

int *x;

而不是

int* x;

这是因为C将*x视为int,而不是x作为int指针。

这可以通过

轻松证明
int* a, b;

其中a是一个int指针,而b是一个int。

stackoverflow.com上至少有5个重复的问题可以讨论这个问题。但是参考文献呢?

3 个答案:

答案 0 :(得分:7)

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;

答案 1 :(得分:4)

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

&需要像*一样编写。

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

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

    int& ar = a, br = b;

    br = 2;

    return b;
}

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

答案 2 :(得分:4)

感谢“template typedefs”,你可以用(可以说)更好的方式声明多个引用:

template<typename T> using ref = T&;
int a, b;
ref<int> ar = a, br = b;
相关问题