C++函数成员返回

Sci*_*ion 3 c++

我目前正在学习C++的基础知识,我发现了以下代码:

#include <iostream>
using namespace std;

class MyClass {
    int x;
public:
    MyClass(int val) : x(val) {}
    int& get() {return x;}
};

int main() {
  MyClass foo (10);
  foo.get() = 15;  
  cout << foo.get() << '\n';

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

我不明白为什么这条线foo.get() = 15有效.对我来说,它看起来像是一个同时获得和设置.我想这是有效的,因为返回类型int&不仅仅是int.

有人可以向我解释它是如何工作的吗?

谢谢.

Bas*_*tch 5

foo.get将返回对(注明)的引用.intint&

可以指定引用(因此它们是l值).阅读关于C++参考的wikipage ,它比我有时间更好地解释.或仔细阅读一本好的C++编程书,例如Stroustrup的编程:使用C++的原理和实践C++ 之旅C++编程语言(或所有这些)!

正如Neil Kirk评论的那样,你几乎可以看到引用被隐式地取消引用.换句话说,如果你熟悉C,想想int* get() { return &x; }*foo.get() = 15;

另请参阅此参考与指针问题

  • `int*p = NULL; int&r =*p;`(拖钓,但信息丰富的拖钓,因为没有人们认为可以存在的神奇的非空保护) (2认同)