可以将std :: map创建为rvalue吗?

Sto*_*row 2 c++ dictionary stdmap std rvalue

我不确定这是否是我的C++语法错误,或者这是否是根本无法完成的事情.

我想定义一个将std :: map作为构造函数参数的类.然后我想通过传递一个"临时"(适当调用这个"rvalue"?)std :: map来创建该类的实例.即我不想创建一个左值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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的编译器:

g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Jar*_*d42 6

Test(std::map<int, char> rMap) : mMap(std::move(rMap)) {}
Run Code Online (Sandbox Code Playgroud)

要么

Test(std::map<int, char>&& rMap) : mMap(std::move(rMap)) {}
Run Code Online (Sandbox Code Playgroud)

要么

Test(const std::map<int, char>& rMap) : mMap(rMap) {}
Run Code Online (Sandbox Code Playgroud)

临时不能绑定到非const l-value引用.

并用它作为

Test test({{1,'a'}});
Test test2({{1,'a'}, {2, 'b'}});
Run Code Online (Sandbox Code Playgroud)

  • 好的._为什么?_没有解释没用.不要只是代码转储. (3认同)