更新:这是一个错误的问题。没有非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 *'
}