[英]Does a templated constructor override the implicit copy constructor in C++?
模板化構造函數(如下所示)是否會覆蓋隱式復制構造函數?
template <class T>
struct Foo
{
T data;
// ...
template <class U>
Foo(const Foo<U> &other) : data((T)doSomethingWith(other.data)) {}
// ...
};
如果是這樣,如果通過值而不是常量引用傳遞other
值,它是否仍會覆蓋它?
如果是這樣,有沒有明確定義復制構造函數的方法呢?
不,那不是復制構造函數。 本標准第12.8節( [class.copy]
)要求:
如果
X
類的第一個參數是X&
,const X&
,volatile X&
或const volatile X&
,並且沒有其他參數或者所有其他參數都有默認參數,則類X
非模板構造函數是一個復制構造函數。
編譯器仍將隱式生成默認值。
您可以通過顯式(需要C ++ 11)
Foo(const Foo<T>&) = default;
模板化構造函數(如下所示)是否會覆蓋隱式復制構造函數?
否。復制構造函數仍然是隱式聲明的,並且優先於模板進行選擇。
有沒有明確定義復制構造函數的方法?
不。如果您不想要隱式復制構造函數,那么您必須自己定義一個。
用模板的構造函數或賦值運算符,它看起來像一個模板[默認構造函數/拷貝構造函數/移動構造函數/拷貝賦值運算符/移動賦值運算符]是不是一個真正的[默認構造函數/拷貝構造函數/移動構造函數/拷貝賦值運算符/移動賦值運算符並且不會替換它或阻止它被隱式生成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.