为什么成员函数的const版本总是被选中,即使存在非const版本

Why is the const version of a member function always selected even the non-const version exists?

本文关键字:版本 const 存在 函数 成员 为什么      更新时间:2023-10-16

更新:这是一个错误的问题。string::data()没有非const版本;忽略这个问题。我很抱歉!

string::data有const版本和非const版本。在下面的代码中,str显然是一个非const对象,因此str.data()应该调用非const版本。然而,vc++ 2013不这么认为。

#include <string>
using namespace std;
void f1(char* sz)
{}
template<class stringT>
void f2(stringT& str)
{
    f1(str.data());
}
int main()
{
    string s;
    f2(s);
    // error C2664: 'void f1(char *)' : 
    // cannot convert argument 1 from 'const char *' to 'char *'
}

string::data有const版本和非const版本。

不,没有。只有const版本