我正在编写一些代码,需要我缓存异常。
请考虑
int main()
{
std::exception_ptr ex;
bool b = ex;
}
由于ex
无法转换为bool
类型,因此无法编译。我目前的解决方法是编写
bool b = !!ex;
甚至
bool b = ex ? true : false;
第一种方式是丑陋的,第二种方式肯定是重言式。我开始责怪编译器(MSVC2015)。两件事:
有没有更好的方法来检查ex
是否已设置为例外?
(相关)我是否需要以某种方式初始化ex
?
答案 0 :(得分:2)
禁止隐式转换,但明确的转换不是。
std :: exception_ptr不能隐式转换为任何算术,枚举或指针类型。它在上下文中可以转换为bool,如果为null则将其计算为false,否则为true。
因此,当您显式转换表达式时它会起作用,但是当您尝试隐式转换时,即在bool
复制初始化中时,它不会起作用。
更好的解决方案是直接初始化bool
:
bool b{ex};
你的P45在帖子里;希望您在下一份工作中查阅文档。 ;)
答案 1 :(得分:1)
类型File exists
是可空的,这意味着当它默认构造时,默认情况下它是一个空值。因为这是一个typedef并且不是必然一个原始指针,所以它不能直接分配给bool,因为这会隐式转换类型。
您可以检查它是否已按照您的设置进行设置,或者您可以使用std::exception_ptr
或者将其明确地转换为布尔值来更干净地进行设置:
nullptr
明确施法:
std::exception_ptr e;
bool isNull = false;
if(e == nullptr)
isNull = true;