簡單的講,關鍵字explicit能夠禁止單參構造函數被用於自動類型轉換。ios
看個單參構造函數用於自動類型轉換的例子:函數
#include <iostream> using namespace std; class Stack { public: Stack(int size) { m_size = size; }; int getSize() { return m_size; } private: int m_size; }; int main() { Stack stk(5); std::cout << stk.getSize() << std::endl; stk = 10; // 發生自動類型轉換:10經過構造函數隱式創建一個對象 std::cout << stk.getSize() << std::endl; return 0; }
若是想禁止該類型轉換(要求類的使用者必須顯示調用類的構造函數),使用explicit關鍵字修飾構造函數便可:
explicit Stack(int size) { m_size = size; };
如此修飾後,上面的程序在編譯時會給出錯誤提示。spa
咱們設計類的時候參考的一個原則是:易於正確使用,難以錯誤使用。設計
2011-12-11 任洪彩 qdurenhongcai@163.comcode
轉載請註明出處。對象