C++-explicitキーワード

1028 ワード

C++ではコンストラクション関数をexplicit型として宣言してバックグラウンド型変換(behind-the-scenes tyoe conversions)を避けることができます.まず、このようなシミュレーションintのクラスを見てみましょう.
class IntCell {
public:
    //          
    IntCell() {
        storedValue = 0;
    }
    //       
    IntCell(int initialValue) {
        storedValue = initialValue;
    }
    //       
    int read() {
        return storedValue;
    }
    //       
    void write(int num) {
        storedValue = num;
    }
priavet:
    int storedValue;
}

C++では、デフォルトでは暗黙的なタイプ変換(implicit type conversion)が許可されていますが、これは強いタイプ化(strong typing)を破壊し、発見しにくいバグを引き起こす可能性があります.次のコードを考慮します.
IntCell obj;
obj = 37; //      ,     

上記のコードでは、intからIntCellの付与文が実行される.強いタイプ化の観点から,等式の両側のタイプが一致しないため,objのwrite法を呼び出して彼に取って代わるべきであることを望んでいる.しかし、通常の場合、この式は成立する.どうしてですか.単一パラメータのコンストラクション関数は、暗黙的なタイプ変換(implicit type conversion)を定義し、このような付与値を互換化する一時オブジェクトを作成します.実際、obj = 37;という文は以下のコードに等しい
IntCell temp = 37;
obj = temp;