次の形式のコンストラクターがあります:
MyClass(int a、int b、int c);
そしてそれはこのようなコードで呼び出されます:
MyClass my_object(4.0、3.14、0.002);
このdoubleからintへの自動変換を防止するか、少なくともコンパイル時に警告を受け取りたいと思います。
この場合、「explicit」キーワードは機能しないようですよね?
次の形式のコンストラクターがあります:
MyClass(int a、int b、int c);
そしてそれはこのようなコードで呼び出されます:
MyClass my_object(4.0、3.14、0.002);
このdoubleからintへの自動変換を防止するか、少なくともコンパイル時に警告を受け取りたいと思います。
この場合、「explicit」キーワードは機能しないようですよね?
あなたのコンパイラは何ですか?gccでは、-Wconversion
これらのタイプの変換について警告するために使用できます。
次のようなプライベートコンストラクターを宣言します。
private:
template <class P1, class P2, class P3>
MyClass(P1,P2,P3);
これにより、すべてではない3つのパラメーターを使用する構築でコンパイル時エラーが発生し、int
移植可能になります。
プライベートMyClass(double a, double b, double c)
コンストラクターを宣言します。