【发布时间】:2015-10-12 10:35:02
【问题描述】:
我遇到了与问题How to prevent implicit conversion from char array to bool相同的问题
我有一个这样的构造函数:
public:
Foo(Goo a=0, bool b=true, QObject* parent = 0);
我想阻止来电
Foo(aGoo, aParent);
其中aParent 隐式转换为bool。 (或与此相关的任何其他指针)
我通过定义实现了这一点
private:
Foo(Goo a, QObject* parent) {}
这会引发“多个构造函数”警告,我认为这是无害的,因为编译器将能够消除歧义。尽管如此,我想摆脱警告。是否有任何无警告的方法来防止隐式转换或抑制该警告?
编辑: 欢迎使用 C++11 解决方案。
【问题讨论】:
-
我认为在这种情况下最明显的做法是避免使用默认参数值,因为它们具有误导性。开发人员实际上可能会编写
Foo(aGoo, aParent),目的是将static_cast<bool>(aParent)作为参数b传递。当这些事情可能发生时,我认为最好实际强迫调用者思考他在做什么。 -
@GiulioFranco 在这种情况下有人使用
QObject作为bool会很奇怪。如果他们真的想将QObject用作bool,我很乐意强迫他们使用static_cast。b实际上是withTimer。尽管如此,您的观点是有效的,也许默认构造函数具有太多意义,无法保留它们。
标签: c++