我在一本书中找到了此代码。

template<typename T,typename Container=std::deque<T> >
class stack
{
public:
    explicit stack(const Container&);
    explicit stack(Container&& = Container());   <<<<<<
    //...
}

我想知道什么时候使用move构造函数的默认值?

据我所知,在移动操作中总是有一个源对象可以移动。

最佳答案

如果您的类恰好有1个没有非默认值参数的构造函数(包括默认构造函数),则可以将其用于该类的默认构造和实例。在以下示例中,bar::bar(foo&&)用于构造x:

struct foo {};

class bar
{
public:
    explicit bar(const foo&) {}
    explicit bar(foo&& = foo()) {}
};

int main()
{
    bar x;
}

这与模板或移动语义无关。例如,您可以使用int举一个更简单的示例:
class foo
{
public:
    foo(int = 0) {}
};

int main()
{
    foo x;
}

关于c++ - 移动构造函数中的默认参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45868855/

10-11 23:17
查看更多