首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

调用‘std::vector::push_back(std::string&)’时没有匹配的函数

调用std::vector::push_back(std::string&)时没有匹配的函数是因为std::vectorpush_back函数只接受右值引用(std::string&&)作为参数,而不接受左值引用(std::string&)作为参数。

std::vector是C++标准库中的容器,用于存储一组动态大小的元素。push_backstd::vector的成员函数,用于将元素添加到容器的末尾。

在调用push_back时,需要传递一个右值引用作为参数。右值引用是C++11引入的新特性,用于表示临时对象或将要被移动的对象。右值引用可以通过std::move函数将左值转换为右值引用。

如果要将一个左值引用(std::string&)传递给push_back函数,可以使用std::move将其转换为右值引用,例如:

代码语言:txt
复制
std::string str = "example";
std::vector<std::string> vec;
vec.push_back(std::move(str));

这样就可以将str添加到vec中,同时str的值会被移动到vec中,str变为空字符串。

推荐的腾讯云相关产品:腾讯云CVM(云服务器),腾讯云COS(对象存储),腾讯云SCF(无服务器云函数)。这些产品可以提供云计算的基础设施和服务,帮助开发者构建和部署应用程序。具体产品介绍和链接地址可以参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++11】{}右值引用移动语义类型分类引用折叠完美转发--C++

0; } 4、左值和右值的参数匹配 C++98中,我们实现一个const左值引用作为参数的函数,那么实参传递左值和右值都可以匹配。...C++11以后,分别重载左值引用、const左值引用、右值引用作为形参的f函数,那么实参是左值会匹配f(左值引用),实参是const左值会匹配f(const 左值引用),实参是右值会匹配f(右值引用)。...将亡值是指返回右值引用的函数的调用表达式和转换为右值引用的转换函数的调用表达,如move(x)、static_cast(x) 泛左值(generalized value,简称glvalue),...像f2这样的函数模板中,T&& x参数看起来是右值引用参数,但是由于引用折叠的规则,他传递左值时就是左值引用,传递右值时就是右值引用,有些地方也把这种函数模板的参数叫做万能引用。...,那么匹配的都是左值引用版本的Fun函数。

5400
  • 【深度剖析 C++11】 第一弹:现代 C++ 编程的基石与革新

    ,d1和d2都是通过直接调用构造函数来初始化的。...std::initializer_list支持迭代器遍历。 STL标准库中的容器支持⼀个用std::initializer_list的构造函数,就可以直接使用{ }进行构造。...下面我们来看一下initializer_list构造的使用 void Test_initializer_list() { //v1是直接调用vector的initializer_list构造 vector...在C++11中实参左值会匹配左值引用,实参为const 左值会匹配const 左值引用,实参为右值则会匹配右值引用 这里我们需要注意,右值引用变量在用于表达式时的属性是左值,为什么会这样设计?...左值 调用func(const int&) func(30); // 右值调用 func(int&&),如果没有 func(int&&) 则会调用func(const int&) func(move

    4400

    一文入魂:妈妈再也不用担心我不懂C++移动语义了!

    }}; 通过传递左值引用或右值引用,我们就能够根据需要调用不同的push_back重载函数了。...还记得我们前文提及的编译器匹配右值引用的情况之一嘛,即由std::move标记的非const对象,因此编译器会调用执行移动构造函数,我们就完成了将tmp对象的数据转移到对象A上的操作: (四)自己动手实现移动语义...),push_back函数需要确保应用程序的状态能够回滚到调用它之前。...在没有NRVO的情况下,当执行语句MyClass myClass=GetTemporary();时,会调用MyClass类的拷贝构造函数,通过对象A来拷贝创建myClass对象。...{}}; 现在,MyClass类型没有实现移动语义,当我们执行语句MyClass myClass=GetTemporary();时,编译器没有办法调用移动构造函数来创建myClass对象。

    1.3K20

    C++11特性大杂烩

    ;但是vector和list是单个参数的构造函数,并且没有多个参数的构造函数,那是怎么做到下面的初始化呢?...函数按照传入参数的类型匹配调用相同类型的Func函数。...std::move(s1);//传右值--构造Person s3;s3 = std::move(s1);//赋值return 0;}当string类没有实现移动拷贝构造函数和移动赋值重载函数时,Person...使用该修饰符时,参数列表不可省略(即使参数为空)。->returntype:返回值类型。用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略。...,从前往后依次遍历参数,遍历完一个(打印)然后把参数包剩余参数递归传递给showlist函数,当传递到最后一个参数的时候,此时调用的函数匹配递归终止函数。

    90950

    【c++11】右值引用和移动语义

    我们这里屏蔽移动构造 to_string的返回值是一个右值,用这个右值构造ret2,如果没有移动构造,调用就会匹配调用拷贝构造,因为const左值引用是可以引用右值的,这里就是一个深拷贝。...移动构造函数和移动赋值运算符是实现移动语义的核心部分。 移动构造函数:在构造时,通过交换资源将右值对象的资源转移到新对象中。...这对于性能优化非常重要,尤其是在涉及动态内存管理的类(如 std::vector、std::string)时,可以避免不必要的深拷贝。...,没有移动系列函数 list lt; lt.push_back(10); int x = 20; lt.push_back(x); void push_back(const T& value)...; // 插入一个左值 void push_back(T&& value); // 插入一个右值(支持移动语义) 对于 int,移动构造和拷贝构造的效果相同,因为 int 是一个标量类型,没有动态资源

    14710

    C++11(2)

    每一次拷贝都会调用一次拷贝构造函数,每一次拷贝构造都会开辟空间拷贝数据; 如果使用右值进行拷贝时就会一定程度的提高效率; 右值引用的使用场景 移动构造:参数为右值;因为右值是即将销毁的,是临时的,所以我们无需在按照他的拷贝了...能,但是没必要;因为日期类的成员变量都是普通变量,拷贝都是浅拷贝,移动构造和拷贝构造没有区别;但是对于string,vector等这些是需要深拷贝开辟空间的;使用移动构造可以省下空间,所以是必要的; 移动赋值.../list/list/push_back/ http://www.cplusplus.com/reference/vector/vector/push_back/ void push_back...默认生成的移动构造函数,对于内置类 型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动构造, 如果实现了就调用移动构造,没有实现就调用拷贝构造。 2....默认生成的移动构造函数,对于内 置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动赋 值,如果实现了就调用移动赋值,没有实现就调用拷贝赋值。

    5210

    终于弄明白了万能引用和右值引用的区别

    { public: void push_back(T&& x); }; //形如 T&& , 但是不涉及型别推导,因为 push_back作为 vector的一部分,如不存在特定的...vector实例,则它也不存在 //该实例的具现完全决定了 push_back的声明型别,给定: std::vector v; //会导致 std::vector模板具现化为如下实例...,这样一来,调用完 setName函数返回时,n将变成一个不确定的值 改进: std::move改为 std::forward */ //测试4:...short型别的实参 精确匹配优先于提升以后才能匹配,所以,形参型别为万能引用的版本才是被调用的版本 为什么short传给万能引用却报错呢?...::string的构造函数,但是 std::string的构造函数中并没有形参为 short的版本 */ //测试4: Person p("nacy

    1.9K10

    【C++修炼之路】27.右值引用

    事实上,对于左值引用,最有意义的就是在函数传参以及传返回值时,通过左值引用可以减少拷贝,因为普通的变量实际上都是将传入的参数拷贝到函数参数上或者将返回值拷贝到一个临时变量中。...,就我们之前所学的,要想通过左值引用的方式不让函数返回值深拷贝,可以将函数改成输出型参数,即: //解决方案:换成输出型参数 void generate(int numRows, vectorvector...6.2 实例演示 这是调用的std中的list,如果是自己写的list呢,就拿我们之前实现的list来说,如果在insert和构造时都重载上下面的移动构造,看看会发生什么: list_node(T&&...这就是我们在第六个标题说到的,在传参数的过程中,右值引用的变量接收了右值,但他会继续传到另一个函数,此时就会因这个值具有左值属性而被当成左值,所以在匹配函数的时候调用的仍然是深拷贝,因此,我们在这些移动构造的函数还有要将参数通过...七.完美转发 7.1 万能引用 在一开始的学习中,我们就说到,没有move的左值不能被右值引用,也就是说下面这样是不对的: 但此时,为了减少繁琐,不区分左值右值,此时就可以用下面这种模板,对于左值和右值都可以进行匹配

    27400

    【深度剖析 C++11】 第三弹:C++11完结,迈进高效编程的新纪元

    ,在调用函数时,编译器会根据我们传递的参数的个数和类型,结合引用折叠的规则,去自动实例化对应的函数。...下面代码本质是利用了编译时递归,从而获取参数包里面的参数 //本质时编译时递归,终止条件需要放在上面 //递归的终止条件,参数包剩余0个参数时自动匹配,终止递归 void ShowList() {...std::function 的实例对象可以包装存储其他的可以调用对象,包括函数指针、仿函数、 lambda 、 bind 表达式等,存储的可调用对象被称为 std::function 的目标。...函数指针、仿函数、 lambda 等可调⽤对象的类型各不相同, std::function 的优势就是统 ⼀类型,对他们都可以进行包装,这样在很多地方就方便声明可调用对象的类型。...例如:在包装调用成员函数时,我们每次调用都需要显示传递对象或者对象的指针,我们可以使用bind将这个参数绑定,就不需要每次显示传递了。

    9810

    C++11

    默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动赋值,如果实现了就调用移动赋值,没有实现就调用拷贝赋值。...用追踪返回类型形式声明函数的返回值类型,没有返回 值时此部分可省略。返回值类型明确情况下,也可省略,由编译器对返回类型进行推 导。 {statement}:函数体。...::string&)> func = std::bind(&MyClass::displayMessage, &obj, std::placeholders::_1); // 调用封装的成员函数...obj1; AnotherClass obj2; // 存储多个成员函数 std::vectorstd::functionstd::string&)...存储成员函数:使用 std::vectorstd::functionstd::string&)>> 存储不同类的成员函数,通过 std::bind 将它们绑定到各自的对象。

    14110

    C++ —— 剑斩旧我 破茧成蝶—C++11

    std::cout << r3 << '\n'; return 0; } 3.4 左值和右值的参数匹配 1....C++11以后,分别重载左值引⽤、const左值引⽤、右值引⽤作为形参的f函数,那么实参是左值会匹配f(左值引⽤),实参是const左值会匹配f(const 左值引⽤),实参是右值会匹配f(右值引⽤),...同时具有三个会构成函数重载,编译器会去调用最匹配的 void f(int& x) { std::cout << "左值引⽤重载 f(" << x << ")\n"; } void f(const int...如果你没有⾃⼰实现移动构造函数,且没有实现析构函数 、拷⻉构造、拷⻉赋值重载中的任意⼀个。...->return type :返回值类型,⽤追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略。⼀般返回值类型明确情况下,也可省略,由编译器对返回类型进⾏推导 6.

    5500

    工作两年了,还只会用sort进行排序?

    算法 条款27:确保目标区间足够大 //思考这样一个问题:stl容器被添加时(insert, push_front,push_back)自动扩展它们自己来容纳新对象,是不是就不必担心要为容器的对象腾出空间了...::endl; } /** 1, back_inserter返回的迭代器会调用push_back,因此可以在任何提供puah_back的容器上使用 back_inserter(vector,string...2,1 当字符匹配时这个判断式返回true,因为当判断式返回false时mismatch会停止。...2,2 我们不能为此使用ciCharCompare,因为它返回-1、1或0,而当字符匹配时它返回0,就像strcmp。...)来调用区间中的每个元素, 但传给for_each的函数只接收一个实参(当前的区间元素),而且当完成时for_each返回它的函数 2, for_each听起来好像你只是要对区间的每个元素进行一些操作,

    91820
    领券