C++ &;的含义是什么;在c++;?

C++ &;的含义是什么;在c++;?,c++,syntax,reference,C++,Syntax,Reference,我想知道以下示例中&的含义: class1 &class1::instance(){ ///something to do } 它是对对象的引用(不使用指针算法实现)。它返回对定义它的对象类型的引用。这意味着您的方法返回对method1对象的引用。引用与指针类似,因为它引用对象而不是对象的副本,但与指针的区别在于引用: 不能为未定义/空 你不能用它们做指针运算 因此,它们是指针的一种轻量级、更安全的版本。在语句的上下文中,它似乎将返回对定义它的类的引用。我怀疑“做事”部分是一个

我想知道以下示例中&的含义:

class1 &class1::instance(){

///something to do

}

它是对对象的引用(不使用指针算法实现)。

它返回对定义它的对象类型的引用。

这意味着您的方法返回对method1对象的引用。引用与指针类似,因为它引用对象而不是对象的副本,但与指针的区别在于引用:

  • 不能为未定义/空
  • 你不能用它们做指针运算

因此,它们是指针的一种轻量级、更安全的版本。

在语句的上下文中,它似乎将返回对定义它的类的引用。我怀疑“做事”部分是一个

return *this;

这意味着变量不是变量本身,而是对它的引用。因此,如果它的值发生变化,如果使用print语句查看它,您将立即看到它。查看引用和指针,以获得更详细的答案,但基本上是指对变量或对象的引用…

< p> <代码>和<代码>操作符在C++中有三个含义。
  • “按位AND”,例如
    2&1==3
  • “地址”,例如:
    intx=3;int*ptr=&x
  • 参考类型修饰符,例如
    intx=3;int&ref=x

这里有一个引用类型修饰符。您的函数
class1&class1::instance()
class1
类型的成员函数,名为
instance
,它返回一个-to-
class1
。如果您编写
class1&class1::instance()
(相当于您的编译器),您可以看到这一点.

在给定的上下文中呢?用法示例如下nice@daemonfire300:问题中有一个用法示例。用法示例为nice@daemonfire300:问题中有一个用法示例。@daemonfire300:用法示例是我不是谷歌,我的答案足以在十几个网站上找到例子。这是一个非常危险的假设。对于@Wim所说的所有其他内容,我要补充一点,如果您将其写成
class1&class1::instance()
我认为
&
*
在声明中绑定到右边是如此重要,以至于它淹没了将它们与类型一起放置的所有参数,正如您链接的那篇文章中所述。这可能是因为我是在老式的C语言中长大的,“
inta,b,*C;
”是一个很好的习惯用法。从技术上讲,它们在语法上是向右的。我确实在文章中提到了这一点,但我看不出这如何“淹没”了其他论点。这篇文章的全部观点是,不,这根本不是最重要的考虑因素。关于计算机的想法是帮助人类:让我们编写对我们有意义的代码,而不是自费编写与计算机语言匹配的代码。但是在这种情况下,如果您以对人类“有意义”的方式格式化代码(在标准ese中,将修饰符视为类型说明符的一部分,而不是声明符的一部分)你把自己置于错误的风险中,因为计算机没有这样对待它们。在这种情况下,要使计算机适应人类需要改变语言定义,这是没有时间机器无法做到的;如果做不到这一点,最好的选择是让人类读者清楚编译器将如何解释代码。@Zack:在本例中,这意味着通过尽可能紧密地演示返回类型
class1&
来指示函数将返回引用。这种习惯唯一可能出现的错误是指针的多重声明,我在文章中将其视为一个被高估的边缘案例,而不是超过其他考虑因素,比如导致这个问题产生的因素。我不能同意你的观点。在我看来,
(相同的
*
)的位置在原始示例中的返回类型的清晰度上没有区别,但多声明场景是真实的,而不是边缘情况。我见过人们即使在现代的每一行C++中都会犯这样的错误。还有一种观点认为,当修饰符不以这种方式绑定时,将修饰符靠左会让人们误解更复杂的声明符,例如当指向函数的指针发挥作用时(但我承认,我个人的规则总是使用typedef)。