我有一个类有两个构造函数。一个是针对 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&)
,那么问题也可以解决。或者考虑使用 重复答案 中提到的 type_trait。 - iammilindstd :: string
重载。 这非常不同 - 字符串不是内置类型,也不会转换为bool
。 指针会。 - MSaltersconst char*
转换为std::string
。但是这里是const A *
。您还可以参考超级重复问题的链接。请参考OP的[评论](https://dev59.com/zbjna4cB1Zd3GeqP5CSx?noredirect=1#comment104939037_59372958),其中说明链接答案满足查询。 - iammilind