std :: cin直接到一个函数

时间:2016-04-28 16:12:53

标签: c++

最近我遇到了以下部分代码。我不知道它是否有任何意义,我只是想了解它:

#include <iostream>
class foo{
    private:
        int memeber;
    public:
        int &method(){ return memeber; }
};

int main(){
    foo bar;
    std::cin >> bar.method();
}

我以前从未见过这样的事情。我很惊讶它甚至编译。你怎么能直接找到一个函数地址?有人可以详细说明它的作用以及是否可以用于任何事情?

2 个答案:

答案 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&)运算符一起用作任何其他左值(即变量)。