【C++】關鍵字explicit的做用

簡單的講,關鍵字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

轉載請註明出處。對象

相關文章
相關標籤/搜索