I just saw a similar question,但它来自5年前。
现在我们有了C ++ 11,引入了新的移动语义,这可能会改变上述问题中的行的解释方式。 那么,这些线在新标准中的表现如何呢?
struct POD {
double doge; // so plain, much data, wow
}
class CopyCtible {
public:
CopyCtible();
CopyCtible( int );
CopyCtible( CopyCtible const& );
CopyCtible( CopyCtible&& ) = delete;
~CopyCtible();
}
class CopyCtibleEx {
public:
CopyCtibleEx();
CopyCtibleEx( int );
explicit CopyCtibleEx( CopyCtibleEx const& );
CopyCtibleEx( CopyCtibleEx&& ) = delete;
~CopyCtibleEx();
}
class MoveCtible {
public:
MoveCtible();
MoveCtible( int );
MoveCtible( MoveCtible const& ) = delete;
MoveCtible( MoveCtible&& );
~MoveCtible();
}
class BothCtible {
public:
BothCtible();
BothCtible( int );
BothCtible( BothCtible const& );
BothCtible( BothCtible&& );
~BothCtible();
}
POD pod1 = POD();
POD pod2 = pod2;
CopyCtible cc1 = CopyCtible();
CopyCtible cc2 = 10;
CopyCtibleEx cce2 = 20;
MoveCtible mc1 = MoveCtible();
MoveCtible mc2 = 30;
BothCtible bc1 = BothCtible();
BothCtible bc2 = 42;
我故意删除了不那么有趣的线条(比如MoveCtible mc3 = mc1;
- 哦来吧,很明显一个好的编译器只会告诉你放下键盘并走开),但是,如果你不那么铁杆的人希望,我也可以添加它们。