作业帮 > 综合 > 作业

我想问一下在C++中,这个函数的参数是什么意思?是引用的指针吗?、 Class A(const Class&& B){…

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/06/07 13:16:32
我想问一下在C++中,这个函数的参数是什么意思?是引用的指针吗?、 Class A(const Class&& B){……}
其中Class A 和 Class B 都为两个类实例.此函数假设为Class A 的构造函数!
我想问一下在C++中,这个函数的参数是什么意思?是引用的指针吗?、 Class A(const Class&& B){…
标题有字数限制,代码不完整
从以上看,参数是 "右值引用" ,右值引用是C++11加入的
LZ 发完整代码吧
再问: 好像是右值引用,我想知道这两个&&具体代表什么意思,参数和函数之间具体是怎么在内存中操作的! 代码如下: Class CText() { private: char* pText; public: CText(CText&& txt) { pText = txt.pText; txt.pText = nullpter; } }
再答: 说起来比较长, 所谓的右值可以简单的理解为 "临时对象" 像CText, vector, string这样的类, 每次复制都需要开辟新的内存, 并且复制每一个元素. 这样的消耗非常大. 如下 Vector V = GetVector(xxx) // 假设GetVector返回一个10000个元素的Vector // 这个Vector在赋值给V之后就被析构掉了, V要自己开辟内存来保存数据 // 这很浪费, 假设这个返回的临时Vector叫做 T // 如果V可以把T的内存"偷过来", 即V.ptr = T.ptr; 就不需要再开辟内存了 // 为了防止T在析构时释放掉"被偷掉的内存", 把T.ptr = nullptr; 就安全了 但是V如何识别 T是一个临时的变量而不是一个正常的变量呢 对正常的变量, V会乖乖的开辟内存并且复制, 对临时对象只要把它的指针偷过来就好了 CText(CText&& move) // 叫做转移构造函数, 专门给临时变量设置的, 只是简单的偷掉指针 CText(const CText& copy) // 正常的复制函数 CText t("qwertyuiop"); CText t2 = t; // 正常的复制 CText t3 = GetFileName() // 触发转移构造函数 CText t4 = (CText&&)t; // 转移构造函数, t的指针被设0, t4复制了t的指针 CText t5 = std::move(t4) // 标准函数move, 等价与上面的类型转换 当然, 转移赋值函数, 和一切以CText&&为参数的函数, 都会被临时对象触发 此外 T&&也可以用来进行模版参数的完美转发, 模版编程很有用 还有问题的话加我QQ吧1055807553