[问题] move constructor

楼主: KaryuuIssen (一闪)   2018-10-15 05:06:13
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC 5.4
问题(Question):
#include<iostream>
class A {
public:
A() {}
A(const A& x) { std::cout << "Copy constructor\n"; }
A(A&& x) { std::cout << "Move constructor\n"; }
};
A func(int n) { // no RVO
A temp1, temp2;
if (n>0)
return temp1;
else
return temp2;
}
int main() {
A a1 = static_cast<const A&>(func(1)); // Move constructor
}
不知道为什么输出会是Move constuctor而不是Copy constructor
照理说static_cast<const A&>应该把func(1)转成lvalue了才对
而且就算输出是Move constuctor 也不能不定义Copy constructor 否则会编译错
感谢解答
作者: bachelorwhc (单身老王)   2018-10-15 06:24:00
编译器帮你选move constructor 你有没有转都没有意义你把rvalue reference的constructor删掉
作者: w0005151 (蓝厅)   2018-10-16 09:53:00
转型跟constructor无关

Links booklink

Contact Us: admin [ a t ] ucptt.com