C++ 程式設計
外觀
explicit 關鍵字用於避免隱式型別轉換。
以下是一個[1] 可以用於隱式轉換的建構函式的類示例
class Foo
{
public:
// single parameter constructor, can be used as an implicit conversion
Foo (int foo) : m_foo (foo)
{
}
int GetFoo () { return m_foo; }
private:
int m_foo;
};
以下是一個簡單的函式,它接受一個 Foo 物件
void DoBar (Foo foo)
{
int i = foo.GetFoo ();
}
以下是 DoBar 函式的呼叫位置。
int main ()
{
DoBar (42);
}
引數不是一個 Foo 物件,而是一個 int。但是,存在一個 Foo 建構函式,它接受一個 int,因此可以使用此建構函式將引數轉換為正確的型別。
編譯器允許對每個引數只執行一次此操作。
在建構函式之前加上 explicit 關鍵字可以阻止編譯器使用該建構函式進行隱式轉換。將其新增到上面的類將導致函式呼叫 DoBar(42) 出現編譯錯誤。現在需要使用 DoBar(Foo(42)) 顯式地呼叫轉換。
- ↑ explicit 關鍵字的含義是什麼?,2008