防止将 QObject* 隐式转换为布尔值:防止'Multiple constructor'警告
Prevent implicit conversion of QObject* to bool : prevent 'Multiple constructor' warning
我有同样的问题如何防止从char数组隐式转换为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解决方案
我认为该私有构造函数的规范不像您描述的那样,因为它根本不会编译(第一个参数的默认值,但第二个参数不是)。
无论如何,显而易见的解决方案是不使用默认值,而提供一组形式的构造函数。
public:
Foo();
Foo(Goo);
Foo(Goo, bool);
Foo(Goo, bool, QObject *);
private:
Foo(Goo, QObject*); // leave this undefined.
这将触发任何试图调用私有构造函数的非成员或非友元的编译错误。对于成员和好友,结果将是链接错误。
在c++ 11中,您可以使用委托构造函数来减少代码重复。在c++ 11之前,使用由构造函数调用的通用帮助函数。
以上内容不会阻止编译器接受像
这样的内容 Foo afoo(AGoo, (double *)0);
但是,因为几乎任何指针都可以隐式转换为bool
。如果你不想这样做,就把私有构造函数变成一个模板。
相关文章:
- 警告处理为错误这里有什么问题
- 防止主数据类型C++的隐式转换
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- 将指针设置为"nullptr"并不能防止双重删除?
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何防止C++遗留代码中的挂起指针
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 由于非类型模板参数而具有零大小数组的类模板:如何防止警告
- 如何使用非平凡析构函数防止未使用的变量警告
- 如何防止警告 C4355:'this':在基本成员初始值设定项列表中使用
- 当我将字符串文字分配给static char*argv[]时,如何防止编译器发出警告
- 防止将 QObject* 隐式转换为布尔值:防止'Multiple constructor'警告
- 如何防止警告:ISO c++禁止可变长度数组' nodes ' [-Wvla]
- 防止或生成自定义弃用的警告