gpt4 book ai didi

c++ - 可以将 std::map 创建为右值吗?

转载 作者:太空狗 更新时间:2023-10-29 23:35:23 25 4
gpt4 key购买 nike

我不确定这是我的 C++ 语法错误,还是根本无法完成。

我想定义一个将 std::map 作为构造函数参数的类。然后我想通过传递一个“临时”(适合称之为“右值”?)std::map 来创建该类的一个实例。 IE。我不想创建左值 std::map 然后将其传递给构造函数。

这能实现吗?我尝试了以下(注释行显示失败的尝试)

#include <map>
#include <string>
#include <iostream>

class Test
{
public:
Test(std::map<int,char>& rMap)
{
std::map<int,char>::iterator iter;

for (iter = rMap.begin(); iter != rMap.end(); ++iter)
{
mMap[iter->first] = mMap[iter->second];
}
}
virtual ~Test(){}

protected:
std::map<int, char> mMap;
};

int main()
{
std::cout << "Hello world!" << std::endl;

//Test test({1,'a'}); // Compile error.
//Test test(std::map<int,char>(1,'a')); // Also compile error.
//Test test(std::map<int,char>{1,'a'}); // Yet again compile error.

return 0;
}

这是我的编译器:

g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)

可以根据要求发布编译错误,但我不确定如果我的问题是语法问题,它们是否有用。

谢谢。

最佳答案

Test(std::map<int, char> rMap) : mMap(std::move(rMap)) {}

Test(std::map<int, char>&& rMap) : mMap(std::move(rMap)) {}

Test(const std::map<int, char>& rMap) : mMap(rMap) {}

临时不能绑定(bind)到非 const 左值引用。

并将其用作

Test test({{1,'a'}});
Test test2({{1,'a'}, {2, 'b'}});

关于c++ - 可以将 std::map 创建为右值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38600341/

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