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

C++ explicit 關鍵字使用場景

     編輯:關於C++

隱式轉換陷阱

類若有單參數構造函數,編譯器會執行隱式轉換:

class Str {
public:
    Str(int n);           // 構建長度 n 的空間
    Str(const char* p);   // 構建字符串副本
};

Str a = 10;       // 隱式調用 Str(10)
Str b = "abcd";   // 隱式調用 Str("abcd")
Str f = 'f';      // 字符 'f' 提升為 int,調用 Str(102) —— 違背設計初衷

explicit 禁止隱式轉換

class Str {
public:
    explicit Str(int n);
    explicit Str(const char* p);
};

// 現在只能顯式構造
Str c(12);
Str d = Str(20);
Str *z = new Str(21);
// Str a = 10;      // 編譯錯誤
// Str b = "abcd";  // 編譯錯誤

適用場景

  • 單參數構造函數,防止意外隱式轉換。
  • 轉換構造函數、轉換運算符(C++11)。
  • 標準庫容器、智能指針構造函數均標註 explicit。

良習:除非有明確理由需要隱式轉換,否則單參數構造函數應加 explicit。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved