如何在C ++中调用此成员函数?

时间:2017-01-19 21:25:28

标签: c++ reference

是否可以调用此成员int MyClass::get(int key) const而不是int& MyClass::get(int key)?换句话说,在C ++源代码中,可以使用值而不是引用?

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass(int input) : i(input) {};
    int i;

    int get(int key) const {
        std::cout << "int get(int key) const " << key << std::endl;
        return i; 
    }

    int& get(int key) {
        std::cout << "int& get(int key) " << key << std::endl;
        return i;
    }
};

void dummy(const int helpme)
{
    std::cout << helpme << std::endl;
}

int main() {
    // your code goes here
    MyClass abc(6);
    std::cout << abc.get(13) << std::endl;
    int result = (int)abc.get(16);
    dummy(abc.get(18));
    return 0;
}

1 个答案:

答案 0 :(得分:3)

最简单的解决方案是对变量使用const &

有两种简单的方法
const auto & abc_const = abc;
std::cout << abc_const.get(13) << std::endl;

std::cout << static_cast<const MyClass&>(abc).get(13) << std::endl;

编辑:看起来你试图根据返回类型选择一个基于以下两行的重载:

int result = (int)abc.get(16);
dummy(abc.get(18));

See this answer解释了在重载解析过程中从不使用返回类型的方法。