将字符串文字传递给一个带有std :: string&的函数

时间:2010-10-28 15:13:25

标签: c++ string function

我有以下功能

void AddNodeValue(XMLNode& node, std::string& value);

我想这样用:

document.AddNodeValue(modvalue,"modvalue");

并且编译器抱怨:

error C2664: 'void XML::XMLDocument::AddNodeValue(XML::XMLNode &,std::string &)' : cannot convert parameter 2 from 'const char [9]' to 'std::string &'
        A reference that is not to 'const' cannot be bound to a non-lvalue

我不明白为什么那是错的?

编译器:VS2003

1 个答案:

答案 0 :(得分:27)

您的功能需要const std::string&让您使用它。

C ++有一个规则,即rvalue(在您的情况下,是从字符串文字创建的临时std::string)可以与const引用绑定,但不能与非const引用绑定。

据我所知,此限制不是由于任何基本的实现问题,因为临时值可以以其他方式修改。但是假设一个采用非const引用的函数这样做,因为它的主要目的是修改该参数。暂时做这件事通常没有多大意义,所以可能禁止它会远远超过阻止人们做一些有价值的事情。无论如何,并非所有的rvalues都是临时的:有些是真正无法修改的文字。

如果您无法更改AddNodeValue函数,那么您可以解决它:

std::string valstr("modvalue");
document.AddNodeValue(modvalue, valstr);
// valstr might have changed, check the documentation of AddNodeValue