c++で忘れがちなキーワード
あんまり使わないけど、忘れてると宣言されてた時に困るんでmemo。
explicit
explicitで宣言されたコンストラクタは暗黙の型変換を許さない
以下のコードでexplicitを宣言しない場合コンパイルができてしまう。
class func { private: int x_; public: explicit func(int x) { x_ = x; } explicit func(char *str) { x_ = atoi(str); } void setX(int x) { x_ = x; } int getX() const{ return x_; } } int main(){ func ob1 = 4; func ob2 = "123"; cout << "ob1: " << ob1.getX() << endl; cout << "ob2: " << ob2.getX() << endl; // 自動変換を使用して新しい値を代入する ob1 = "1776"; // explicitで宣言されているためコンパイルエラー ob2 = 2001; // explicitで宣言されているためコンパイルエラー cout << "ob1: " << ob1.getX() << endl; cout << "ob2: " << ob2.getX() << endl; return 0; }
mutable
mutableで宣言されたメンバ変数は
constメンバ関数から修正できる
class func { private: mutable int x_; public: func(int x) { x_ = x; } void setX(int x) const { x_ = x; } int getX() const{ return x_; } } int main(){ func ob1(5); ob1.setX(10); // mutableでメンバ変数_xが宣言されていない場合コンパイルエラー cout << "ob1: " << ob1.getX() << endl; return 0; }