- 主题:为什么调用了基类的拷贝构造函数而不是移动构造函数呢?
include <iostream>
template<typename DTTYPE>
class Base
{
public:
Base(){};
Base(const Base &bt, const DTTYPE &scale = 1.0){std::cout<<"base copy"<<std::endl;}
Base(Base &&bt, const DTTYPE &scale = 1.0){std::cout<<"base move"<<std::endl;}
};
template<typename DTTYPE>
class Sed : public Base<DTTYPE>
{
public:
Sed(){};
Sed(const Sed &sd, const DTTYPE &scale = 1.0) : Base<DTTYPE>(sd, scale) {std::cout<<"copy sed"<<std::endl;}
Sed(Sed&& sd, const DTTYPE &scale = 1.0) : Base<DTTYPE>(sd, scale) {std::cout<<"move sed"<<std::endl;}
};
int main(void)
{
Sed<double> a;
Sed<double> b(std::move(a));
return 1;
}
运行结果输出: base copy
move sed
调用了基类的拷贝构造函数而不是移动构造函数。怎么才能调用基类的移动构造呢?
谢谢!
--
FROM 210.26.112.*
谢谢!为什么要加move呢?|
【 在 MyWorkLife (我是谁) 的大作中提到: 】
: Sed(Sed&& sd, const DTTYPE &scale = 1.0) : Base<DTTYPE>(move(sd), scale)
--
FROM 219.246.59.*
thx
【 在 MyWorkLife 的大作中提到: 】
: 这里的sd具名了以后变成了左值引用
:
--
FROM 219.246.59.*
thx!
c++11之后加了好多奇怪的东西。
【 在 libgcc 的大作中提到: 】
: 变量sd虽然是右值类型,但它本身是个左值(你可以取到它的地址的)
: 你要试着理解这一点,
:
: ...................
--
修改:fangniuwawa FROM 219.246.59.*
FROM 219.246.59.*