[英]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.