【发布时间】:2018-12-02 07:12:22
【问题描述】:
我想了解为什么在 C++ 中可以返回对类成员变量的引用,比如下面的例子:
class Foo
{
int x;
public:
int& get_pvar()
{
return x;
}};
显然我们可以在 main() 中访问变量 x,创建对它的引用,然后更改其内容:
Foo obj;
int& ref = obj.get_pvar();
ref = 7;
但这怎么可能呢? x 没有全局范围,也不是类的静态成员。它被定义在内类中。因此,它应该具有本地范围。那么,为什么返回对它的引用甚至在 main() 中创建对它的引用都不是错误呢?
【问题讨论】:
-
这是完全合法的,而且非常有用。这是大多数运营商的秘诀。没有它你不能
x[i]++;。 -
只要
obj存在,obj.x也存在,并且可以使用对它的引用。如果obj不复存在,则obj.x不复存在,并且使用ref会产生未定义的行为。
标签: c++ class scope member-variables return-by-reference