2012-09-14 130 views
6

从n3337 12.3.1/3隐拷贝构造

甲非显式复制/移动的构造(12.8)报价是一转换 构造。隐式声明的复制/移动构造函数不是 显式构造函数;它可能被称为隐式类型转换。

从ANSI ISO IEC 14882 2003

甲非显式拷贝构造(12.8)引用是一个转换构造。隐式声明的拷贝构造函数不是一个显式的构造函数;它可能被称为隐式类型转换。

我没有任何想法,copy-constructor如何被用于conversionsimplicit类型。如果它是标准错误打印/错误,为什么自C++ 03标准以来没有更正?任何链接和例子(如果我们可以使用它的type conversions)真的很感激。

+1

+1提问。即使我在阅读另一主题的答案中引用的标准文本后也有这种疑问。 – Nawaz

回答

8

复制构造可以由派生类型的一个目的是通过切割其转换:

struct A {}; 
struct B : A {}; 

B b; 
A a = b; // uses A::A(A const&) to convert B to A 
+1

这使复制构造函数在被忽略时具有内在的危险性。好的做法是,除非你想要它们,否则你应该防止默认的Copy构造函数和赋值操作符。在C++ 11之前,这可以通过将它们声明为私有并且不实现它们来完成(它有助于评论你正在这样做)。在C++ 11中,你可以用'= delete'替换实现。 –

+5

@JonathanSeng:这是一种方法。我宁愿避免从非抽象类型继承,因此切片是不可能的。除了抽象接口之外,很少有很好的理由继承它。 –

0

在隐式内联联成员函数是不使用definition.the关键字inline的类中定义