[英]C++ explicit conversion and implicit conversion
看下面兩種方式新建class Y的object:
(1)
X x;
Y y(x);//explicit conversion
(2)
X x;
Y y = x;//implicit conversion
第一種方式使用顯式轉換,另一種方式使用隱式轉換。但是,我不太明白它們是如何工作的。它們有什么區別?有人可以為我解釋一下嗎?越詳細越好。非常感謝。
第一個稱為直接初始化,而第二個稱為復制初始化。 假設Y
有一個接受X
(或對它的引用)的構造函數,直接初始化將直接調用該構造函數,而不管該構造函數是否被標記為implicit 。 語義上的復制初始化等同於:
Y y( implicit_conversion<Y>(x) );
也就是說,通過隱式轉換將參數轉換為目標類型,然后調用復制構造函數來初始化變量。 在現實生活中,編譯器將刪除復制並轉換為目標變量,但編譯器必須檢查是否存在從X
到Y
的隱式轉換,並且復制構造函數是可訪問的。
實際上,兩者都是隱式轉換,假設您的 class "Y" 具有如下構造函數:
public:
Y(X &x)
帶有單個參數的 class 構造函數將為您執行轉換。
為避免隱式構造,請使用以下其中一項(根據您的情況可能更適合您):
explicit
關鍵字
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.