gpt4 book ai didi

c++ - 如何将右值作为引用参数传递给函数

转载 作者:行者123 更新时间:2023-11-30 02:20:30 26 4
gpt4 key购买 nike

我有一个获取对象引用的函数。在一个特定的调用实例中,我不关心函数如何处理该特定对象。因此我希望我可以避免在主函数中创建该对象。

代码如下:

#include <stdio.h>
#include <unordered_map>

void myFunc(std::unordered_map<int,int> &mp);

int main() {
myFunc(std::unordered_map<int,int>());
return 0;
}

void myFunc(std::unordered_map<int,int> &mp) {
printf("%d\n",mp.size());
printf("Hello world.\n");
}

底线是:我不想声明和初始化 unordered_map<int,int>主函数中的对象。此版本的代码报告:

error: invalid initialization of non-const reference of type ‘std::unordered_map&’ from an rvalue of type ‘std::unordered_map’

我也试过const_cast<>std::move ,但都不起作用。

如果我们将 API 更改为:

void myFunc(std::unordered_map<int,int> &&mp)

问题是 API 在多个文件之间共享,我们真的不想更改它。鉴于 myFunc 的 API必须修复,我该如何修改main()这样我就不需要显式创建对象?

------------------------编辑-------------------- ----

另一种解决方法是编写包装函数:

#include <stdio.h>
#include <unordered_map>

void myFunc(std::unordered_map<int,int> &mp);
void UglyWorkAround(std::unordered_map<int,int> &&mp);

int main() {
UglyWorkAround(std::unordered_map<int,int>());
return 0;
}

void UglyWorkAround(std::unordered_map<int,int> &&mp) {
myFunc(mp);
}

void myFunc(std::unordered_map<int,int> &mp) {
printf("%d\n",mp.size());
printf("Hello world.\n");
}

最佳答案

您希望避免为 std::unordered_map<int, int> 编写定义对象似乎没有建立在任何合法的关注之上。但是,由于这就是您的要求,因此有一种方法可以做到这一点:

using M = std::unordered_map<int, int>;
myFunc(const_cast<M&>(static_cast<const M&>(M())));

关于c++ - 如何将右值作为引用参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49581607/

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