gpt4 book ai didi

c++ - 为什么 const 指针会意外转换为 bool?

转载 作者:行者123 更新时间:2023-12-01 23:59:17 25 4
gpt4 key购买 nike

我有一个带有两个构造函数的类。一份 bool和一个 A* .

struct B
{
explicit B(bool b)
{
std::cout << "B(bool)" << std::endl;
}
explicit B(A*)
{
std::cout << "B(A*)" << std::endl;
}
};

何时应使用 const A* 构造 B而不是A* -- const A*转换为bool .

const A a;
B b(&a);

输出:B(bool)

<小时/>

所需的解决方案是

compiler error : "no valid constructor for B(const A*)"

我已经尝试过 explicit关键字,但它不起作用。

running example at coliru

最佳答案

我们无法阻止从指针到 bool 的隐式转换 ( bool conversion );您可以添加另一个采用 const A* 的重载构造函数,它将在 overload resolution 中选择。传递 const A* 时,因为它是完全匹配,并且 B::B(bool) 需要隐式转换。将其标记为 delete ,如果被选中,程序就会变得格式错误。

struct B
{
explicit B(bool b)
{
std::cout << "B(bool)" << std::endl;
}
explicit B(A*)
{
std::cout << "B(A*)" << std::endl;
}
B(const A*) = delete;
};

LIVE

或者你可以将带有指针类型的重载构造函数标记为delete,那么所有指针类型都不能传递给B::B,除了A * 其构造函数是像您所做的那样单独声明的。

template <typename T>
B(T*) = delete;

LIVE

关于c++ - 为什么 const 指针会意外转换为 bool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59372900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com