2013-11-15 48 views
1

我有以下代碼:如何防止從char到int的隱式轉換?

#include <iostream> 

template<typename T> class DynArray 
{ 
    T *contents; 
    int size; 
public: 
    explicit DynArray(int initial_size); 
}; 

int main() 
{ 

    DynArray<std::string> b('7'); 

    return 0; 
} 

我的問題是:我怎麼能防止焦炭隱式轉換從編譯爲int? (即這一行:`的DynArray B(「7」);

+2

在C++ 11中,添加一個已刪除的構造函數:'explicit DynArray(char)= delete;' –

回答

6

您不能直接,但你可以在傳遞一個char其中最先被選擇的構造函數的重載...

explicit DynArray(char); 

使其成爲私人的,不要定義它,只是聲明它。與聲明但不定義複製ctor /複製賦值運算符一樣,以防止類可複製。

或者,使用C++ 11它刪除(這是新的清潔/清除/更好的方式做上述)...

explicit DynArray(char) = delete;