C++-explicitキーワード
1028 ワード
C++ではコンストラクション関数をexplicit型として宣言してバックグラウンド型変換(behind-the-scenes tyoe conversions)を避けることができます.まず、このようなシミュレーションintのクラスを見てみましょう.
C++では、デフォルトでは暗黙的なタイプ変換(implicit type conversion)が許可されていますが、これは強いタイプ化(strong typing)を破壊し、発見しにくいバグを引き起こす可能性があります.次のコードを考慮します.
上記のコードでは、
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;