移动构造函数中的默认参数
Default arguments in a move constructor
我在一本书上找到了这段代码。
template<typename T,typename Container=std::deque<T> >
class stack
{
public:
explicit stack(const Container&);
explicit stack(Container&& = Container()); <<<<<<
//...
}
我想知道什么时候使用移动构造函数的默认值?
据我所知,在移动操作中总是有一个源对象要移动。
如果您的 class 恰好有 1 个没有非默认值参数的构造函数(包括默认构造函数),它可以用于默认构造和 class 的实例。在下面的示例中,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;
}
我在一本书上找到了这段代码。
template<typename T,typename Container=std::deque<T> >
class stack
{
public:
explicit stack(const Container&);
explicit stack(Container&& = Container()); <<<<<<
//...
}
我想知道什么时候使用移动构造函数的默认值?
据我所知,在移动操作中总是有一个源对象要移动。
如果您的 class 恰好有 1 个没有非默认值参数的构造函数(包括默认构造函数),它可以用于默认构造和 class 的实例。在下面的示例中,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;
}