gpt4 book ai didi

c++ - 将字符串文字传递给采用 std::string& 的函数

转载 作者:IT老高 更新时间:2023-10-28 21:40:09 25 4
gpt4 key购买 nike

我有以下功能

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

最佳答案

您的函数需要使用 const std::string& 才能这样使用它。

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

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

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

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

关于c++ - 将字符串文字传递给采用 std::string& 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com