为什么即使非const版本存在,也始终选择成员函数的const版本?

时间:2014-06-26 17:16:18

标签: c++ visual-c++ const overloading member-functions

更新:这是一个错误的问题。没有非const版本的string :: data();忽略这个问题。对不起!

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 *'
}

1 个答案:

答案 0 :(得分:3)

  

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

不,它没有。 There is only a const version.