在C++中防止构造函数中隐式转换数值类型

Hug*_*ugo 8 c++ constructor casting implicit

我有一个形式的构造函数:

MyClass(int a,int b,int c);

并使用以下代码调用它:

MyClass my_object(4.0,3.14,0.002);

我想阻止这种从double到int的自动转换,或者至少在编译时得到警告.

似乎"显式"关键字在这些情况下不起作用,对吧?

Mar*_*n B 9

你的编译器是什么?在gcc下,您可以-Wconversion用来警告您这些类型的转换.

  • -Wall缺少很多东西,甚至没有-Wall -Wextra包含一切.我希望有一个开关来真正启用所有警告,然后禁用那些一个一个地引起麻烦的警告. (2认同)

Joe*_*oeG 5

声明一个这样的私有构造函数:

private:
template <class P1, class P2, class P3>
MyClass(P1,P2,P3);
Run Code Online (Sandbox Code Playgroud)

这将导致使用3个参数的任何构造的编译时错误,这些参数不是全部int,并且它是可移植的.