最近我遇到了以下部分代码。我不知道它是否有任何意义,我只是想了解它:
#include <iostream>
class foo{
private:
int memeber;
public:
int &method(){ return memeber; }
};
int main(){
foo bar;
std::cin >> bar.method();
}
我以前从未见过这样的事情。我很惊讶它甚至编译。你怎么能直接找到一个函数地址?有人可以详细说明它的作用以及是否可以用于任何事情?
答案 0 :(得分:5)
此代码:
std::cin >> bar.method();
可以改写得更详细:
int &ref = bar.method();
std::cin >> ref;
因此,method()
引用int
的结果会传递给std::cin.operator>>()
答案 1 :(得分:4)
有人可以详细说明它的作用以及它是否可用于任何事情?
bar.method()
会返回对foo::memeber
的引用,该引用可用作左值。
你怎么能直接找到函数地址?
它不是功能地址。
int &method(){ return memeber; } // ^
作为@Lightness mentioned,它有点令人困惑。写得更好(更清晰)的风格可能是
int& method(){ return memeber; }
// ^ makes it more clear that it's a int reference and not address of the function
左值可以与std::istream& operator>>(std::istream&,T&)
运算符一起用作任何其他左值(即变量)。