- 締切済み
警告「代入される前に使われている」を出す方法
bccで以下のコードをコンパイルすると。 「'i' は、おそらく値が代入される前に使われている」 と警告が出ますが、 「'h' は、おそらく値が代入される前に使われている」 とは警告を出してくれません。 警告を出す方法ってないでしょうか? Hogeメンバに bool 型の初期化フラグでも実装しようかな・・・。 #include <iostream> class Hoge { public: Hoge(){ } Hoge( int i ){ t = i; } operator int(){ return t; } int t; }; int main() { int i; Hoge h; std::cout << i << std::endl; std::cout << h << std::endl; return 0; }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
こんにちは。 警告を出すのは無理そうですが、 class Hoge { public: Hoge(int i) : t(i) { } operator int() const { return t; } private: int t; }; の様にして様にして、デフォルトコンストラクタを無くせば、 Hoge h = 0; 又は Hoge h(0); と書かない限り、コンパイルエラーに出来ると思います。
- N-Ishikawa
- ベストアンサー率25% (1/4)
C++は昔かじった程度なんですが、hは宣言した際 インストラクタ(定義されていないみたいですが)によって 初期化されている扱いになっているからじゃないですか? iはintで宣言されているので クラスのようなインストラクタは ないため初期化に関する警告が出力されていることになるかと思います。
お礼
回答ありがとうございます。 宣言した際にコンストラクタで初期化されている扱い・・・ なるほど。 組込み型とユーザ定義型で区別しているんでしょうか?
お礼
回答ありがとうございます。 警告を出すのは無理なのですか・・。 デフォルトコンストラクタを無くす・・・。 面白いですね。 でも必ず宣言と同時に代入しなければいけなくなりますね・・・。