跳轉到內容

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)) 顯式地呼叫轉換。

參考資料

[編輯 | 編輯原始碼]
  1. explicit 關鍵字的含義是什麼?,2008

華夏公益教科書