向量中的STL Push_back字符串

Bha*_*waj 3 c++ stl vector

我试图在字符串向量中推送一个字符串,如下所示

void Node::set_val(string &val)
{
    this->val.push_back(val);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将其称为如下

Obj.set_val("10h;");
Run Code Online (Sandbox Code Playgroud)

我得到以下错误,

error: no matching function for call to 'Node::set_val(const char [5])'
Run Code Online (Sandbox Code Playgroud)

我假设""中的字符串与stringc ++ 中的字符串相同,为什么会出现这样的错误?下面有什么要改变的?

Tar*_*ama 9

您正在接受std::string非const引用.非const引用不能绑定到rvalues "10h;",因此您无法将文字传递给该函数.

如果你不打算修改参数,你应该通过reference-to-const来获取你的参数:

void Node::set_val(const string &val)
//                 ^^^^^
Run Code Online (Sandbox Code Playgroud)

这样,临时std::string将由你构建const char[5]并传入set_val.

你可以通过接受string值并将move其加入到vector:

void Node::set_val(string val)
{
    this->val.push_back(std::move(val));
}
Run Code Online (Sandbox Code Playgroud)

这可以防止您制作一些不必要的副本.