首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ explicit 關鍵字:防止隱式轉換的建構函式

     編輯:關於C++

用途

標記單參數建構函式(或多參數但有預設值)為 explicit,禁止隱式轉換,避免函式呼叫時發生非預期的型別轉換。

程式碼

/*************************************************
 File: main.cpp
 Copyright: C.L.Wang
 Author: C.L.Wang
 Date: 2014-04-01
 **************************************************/
#include <iostream>
using namespace std;

class A {};
class B {
public:
    explicit B(const A& x) { cout << "B's constructor" << endl; }
    B& operator=(const A& x) { cout << "B's assignment" << endl; return *this; }
    operator A() { cout << "B's conversion" << endl; return A(); }
};

void fn(B arg) { cout << "function" << endl; }

int main() {
    A foo;
    B bar(foo);          // 顯式建構 OK
    // B bar = foo;      // 錯誤:隱式建構被 explicit 阻擋
    // bar = foo;        // OK:賦值運算子非 explicit
    // foo = bar;        // OK:轉型運算子
    // fn(foo);          // 錯誤:隱式轉換被阻擋
    fn(bar);             // OK:顯式傳遞 B
    return 0;
}

輸出

B's constructor
function

最佳實務

  • 單參數建構函式預設加 explicit,除非刻意設計隱式轉換(如智慧指標、包裝類別)。
  • C++11 起 explicit 也可用於轉型運算子(explicit operator bool())。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved