具有引用返回类型的C ++指针

时间:2018-06-29 07:39:51

标签: c++ clion

我想编写一个具有引用返回类型的函数指针

string & cmp(string &s1, string &s2) {
    return s1.size() > s2.size() ? s1 : s2;
}

功能cmp很简单,它只返回更长的字符串。

string string1 = "123";
string string2 = "1234";

string & (*pf)(string &,string &) = cmp;

可以打电话

string &temp = cmp(string1, string2);

但是当我尝试使用pf时,

string &temp = pf(string1, string2);

编译器显示错误:expression must be lvalue

已添加:抱歉,IDE似乎提供了错误的检查信息。

enter image description here

我正在使用CLion作为IDE,红色下划线显示错误,但实际上我可以编译并成功运行。...这很奇怪,有人知道我的IDE检查有什么问题吗?还是我需要在CLion社区发布问题?

2 个答案:

答案 0 :(得分:0)

我认为CLion默认情况下只是将函数调用视为右值(即使它确实返回了左值引用)。但是切勿在C ++中使用函数指针,此处std::function可以避免C函数指针的语法混乱,或者您可以直接编写

auto pf = cmp;

auto& pf = cmp;

虽然不确定推荐哪个,但是我的猜测是auto&,因为cmp是一个右值。

答案 1 :(得分:0)

我尝试过,您所要做的就是从主函数的变量中删除&:

string& (*pf)(string &,string &) = cmp;
string temp = pf(string1, string2);

但是我尝试了其他可行的方法:

string& (*pf)(string &,string &) = cmp;
string &temp = cmp(string1, string2);
temp = pf(string1, string2);
temp = test(string1, string2);