簡體   English   中英

C ++顯式構造函數和強制轉換

[英]C++ explicit constructor and cast

在Effective C ++,Item 27

class Widget {
public:
explicit Widget(int size);
...
};
void doSomeWork(const Widget& w);
doSomeWork(Widget(15)); // create Widget from int
                        // with function-style cast

我不確定調用doSomeWork時到底發生了什么。 我認為函數doSomeWork的參數w是由另一個使用復制構造函數的Widget對象初始化的,但是其他Widget對象在哪里? 它是由評論指示的鑄造創建的臨時對象嗎? 有人能詳細告訴我doSomeWork函數參數初始化時調用了什么嗎?

函數doSomeWork的參數w是您在行中作為參數創建的Widget

doSomeWork(Widget(15));

doSomeWork期望一個Widget並且已使用您列出的構造函數顯式提供了一個Widget 沒有使用編譯器提供的復制構造函數,因為doSomeWork(const Widget &w)簽名使用傳遞引用語義。

只構建了一個對象,雖然可以使用按值傳遞,但是聰明的現代編譯器會將構造推遲到方法的范圍,以避免重復構造。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM