小编Kri*_*Kri的帖子

如何在没有std :: move的情况下移动临时对象

类的移动构造函数接受可以引用临时对象的rvalue引用.所以,我有临时对象和适当的移动构造函数,它可以接受对临时对象的引用,但是移动构造函数不会被调用.怎么了?

    //g++  5.4.0

#include <iostream>

class foo
{
    int data;
public:
    foo(int v) : data(v) {std::cout << "foo(int)\n";}

    foo(foo&& f)
    {
        std::cout << "moved\n";
    }

    void print()
    {
        std::cout << data;
    }
};

void acceptTmp(foo f)
{
    f.print();
}

int main()
{
    foo f1 = foo(100);
    f1.print();
    acceptTmp(foo(200)); //also does not move
}
Run Code Online (Sandbox Code Playgroud)

c++ move-semantics copy-elision c++11

4
推荐指数
1
解决办法
602
查看次数

标签 统计

c++ ×1

c++11 ×1

copy-elision ×1

move-semantics ×1