我从第二个参数中传入merge_sort(右)的最后一个错误的“std :: vector”类型的rvalue错误中得到“std :: vector&”类型的非const引用的无效初始化 .
left_merged = merge_sort(left);
// right_merged = merge_sort(right);
return merge(left_merged, merge_sort(right));
以下是函数声明:
vector<int> merge_sort(vector<int>& vec)
vector<int> merge(vector<int>& left, vector<int>& right)
我一直在阅读有关rvalue如何成为临时对象的理论,并且如果它没有在初始化器中使用或者分配给变量而被销毁,但我真正想要的是一个快速而肮脏的解决方案,以便能够调用该函数参数 .
快速解决方案吗?
谢谢!
2 回答
将参数类型更改为
const vector<int>&
(const引用),或简单地为vector<int>
(按值) .如果在函数内部没有对参数进行任何更改,则首选第一个选项(const引用) . 否则第二个(按值) . 如果在函数内部,您正在立即复制参数,然后在忽略原始文件时操纵副本,请按值获取参数,跳过副本,然后直接使用参数 .
在这个电话中:
第二个参数是临时的,你不能将非const引用引向临时 . 你需要
并且可能(虽然它不会影响这个特定的例子),
如果您发现自己在函数内部创建了参数的副本,则可以按值获取它们 . 例如,如果您正在复制第二个参数,那么首选: