c++ - vector 中的 STL Push_back 字符串

标签 c++ vector stl

我正在尝试将字符串放入字符串 vector 中,如下所示

void Node::set_val(string &val)
{
    this->val.push_back(val);
}

但是当我尝试如下调用它时

Obj.set_val("10h;");

我得到以下错误,

error: no matching function for call to 'Node::set_val(const char [5])'

我假设""中的字符串与c++中的string相同,为什么会出现这样的错误?下面必须更改什么?

最佳答案

您正在通过非常量引用接收 std::string。非常量引用不能绑定(bind)到右值,例如 "10h;",因此您不能将文字传递给该函数。

如果你不打算修改参数,你应该通过常量引用来获取你的参数:

void Node::set_val(const string &val)
//                 ^^^^^

这样,一个临时的 std::string 将从您的 const char[5] 构造并传递给 set_val

您可以通过按值接收 string 并将其移动vector 中来改进它:

void Node::set_val(string val)
{
    this->val.push_back(std::move(val));
}

这可以防止您制作一些不必要的拷贝。

关于c++ - vector 中的 STL Push_back 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30800171/

相关文章:

c++ - 在 Code::Blocks 中设置 wxWidgets?

c++ - 关于如何使用循环数组实现 std::vector 的建议?

c++ - QT showstatus 提示仅在鼠标离开窗口并返回后显示

c++ - 运动不工作 ncurses 游戏

string - 如何连接Rust Vector的两个 `&str`类型元素并将其添加到零索引

c++ - vector中cbegin和cend的使用

c++ - std::vector 内存分配问题

c++ - 如何在最多进行 3N 次比较时实现 std::make_heap ?

c++ - 非数字输入检查

r - 如何将概率插入矩阵?