通過顯式建構函式或顯式轉換函式進行轉換

涉及呼叫顯式建構函式或轉換函式的轉換不能隱式完成。我們可以請求使用 static_cast 明確完成轉換。除了結果是臨時的之外,其含義與直接初始化的含義相同。

class C {
    std::unique_ptr<int> p;
  public:
    explicit C(int* p) : p(p) {}
};
void f(C c);
void g(int* p) {
    f(p);                 // error: C::C(int*) is explicit
    f(static_cast<C>(p)); // ok
    f(C(p));              // equivalent to previous line
    C c(p); f(c);         // error: C is not copyable
}