2012-09-14 128 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的類中定義