我想编写一个具有引用返回类型的函数指针
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似乎提供了错误的检查信息。
我正在使用CLion作为IDE,红色下划线显示错误,但实际上我可以编译并成功运行。...这很奇怪,有人知道我的IDE检查有什么问题吗?还是我需要在CLion社区发布问题?
答案 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);