itk::SmartPointer 是如何转换为布尔值的
How is the itk::SmartPointer converted to bool?
ITK库使用的智能指针可以隐式转换为bool
,例如在if
子句中。这非常方便,但我想确定它是如何工作的。我的猜测是C++使用提供的operator==
与 0 进行比较,但我找不到任何描述此行为的文档。这真的是怎么回事吗?这是该类的Doxygen页面,适合那些可能发现它比代码本身更方便的人。
此转换运算符
operator ObjectType *() const
{ return m_Pointer; }
允许隐式转换为指针类型,而指针类型又可以转换为 bool
。
虽然它有效,但这通常被认为是一个坏主意:如果你不小心,你可能会意外地存储一个非智能指针,当智能指针破坏其对象时,它可能会失效。出于这个原因,标准智能指针具有允许在布尔上下文中使用的explicit operator bool()
,以及一个显式get()
函数,用于当您真正需要非智能指针时。
相关文章:
- 变量定义到C++布尔值转换
- fstream / ifstream / ofstream 对象如何转换为布尔值
- 将uintptr_t转换为布尔值会使 SSO 基准速度减慢数倍
- 在目标 c++ 中将 CFTypeRef 转换为布尔值
- isspace 函数的性能警告,从 int 转换为布尔值
- 将返回表达式隐式转换为布尔值
- 将结构转换为布尔值
- 整数在 C++ 中没有被类型转换为布尔值
- 为什么我的变体将 std::string 转换为布尔值
- 为什么使用 int 的转换,而不是布尔值
- lambda 转换为布尔值,而不是推导函数指针类型
- 从常量字符串到布尔值的隐式强制转换
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 尝试将字符串变量转换为布尔值会导致 "true" 和 "false" 都等于 0
- Typedef shared_ptr转换为<T>布尔值
- 如果模板值可转换为布尔值,则在编译时禁用类方法
- 避免或警告在 GCC 中从常量字符* 隐式转换为布尔值
- 为什么 lambda 会转换为值为真的布尔值?
- 有没有办法将模板的替换失败转换为布尔值(真/假)或标签(标准::true_type/标准::false_type)
- 将流隐式转换为布尔值