作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一些需要缓存异常的代码。
请考虑
int main()
{
std::exception_ptr ex;
bool b = ex;
}
由于 ex
无法转换为 bool
类型,因此无法编译。我目前的解决方法是写
bool b = !!ex;
甚至
bool b = ex ? true : false;
第一种方式很丑陋,第二种方式肯定是同义反复。我开始责怪编译器(MSVC2015)。两件事:
是否有更好的方法来检查 ex
是否已设置为异常?
(相关)我需要以某种方式初始化 ex
吗?
最佳答案
禁止隐式转换,但不禁止显式转换。
std::exception_ptr is not implicitly convertible to any arithmetic, enumeration, or pointer type. It is contextually convertible to bool, and will evaluate to false if it is null, true otherwise.
因此它在您显式转换表达式时有效,但在您尝试隐式转换时无效,即在 bool
copy-initialization 中。
更好的解决方案是直接初始化bool
:
bool b{ex};
您的 P45 在邮寄中;希望您会在下一份工作中查阅文档。 ;)
关于c++ - 为 std::exception_ptr 隐式转换为 book,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43741546/
我是一名优秀的程序员,十分优秀!