【发布时间】:2019-12-18 00:06:03
【问题描述】:
我有一个有两个构造函数的类。一种用于bool,一种用于A*。
struct B
{
explicit B(bool b)
{
std::cout << "B(bool)" << std::endl;
}
explicit B(A*)
{
std::cout << "B(A*)" << std::endl;
}
};
当 B 应该使用 const A* 而不是 A* 构造时 -- const A* 被转换为 bool。
const A a;
B b(&a);
输出:B(bool)
理想的解决方案是
编译器错误:“B(const A*) 没有有效的构造函数”
我已经尝试过使用explicit 关键字,但它不起作用。
【问题讨论】:
-
如果你把
B(bool)改成B(bool&)也可以解决问题。或者考虑使用duplicate answer 中所述的 type_trait。 -
谢谢——现在我需要在我们的代码库中找到所有可能的“陷阱”
-
我认为这不是重复的 - 建议的重复有
std::string重载。这是非常不同的——字符串不是内置类型,也不会转换为bool。指针可以。 -
@MSalters,这似乎是重复的,因为在链接的 Qn 中,OP 期望
const char*转换为std::string。这里是const A*。您也可以将超级副本引用到链接的 Qn。请参阅 OP 的 comment,它表明链接的答案满足查询。 -
完全 - 对我来说,可以使用链接的问题 - 似乎没有比链接的答案和@songyuanyao 提到的更好的解决方案。
标签: c++ casting compiler-errors boolean-expression