c++ - itk::SmartPointer 是如何转换为 bool 的?

标签 c++ boolean implicit-conversion itk

smart pointer used by the ITK library可以隐式转换为 bool,例如在 if 子句中。这非常方便,但我想确定它是如何工作的。我的猜测是 C++ 使用提供的 operator== 与 0 进行比较,但我找不到任何描述此行为的文档。这真的是怎么回事吗? Here是类的 Doxygen 页面,对于那些可能觉得它比代码本身更方便的人。

最佳答案

这个转换运算符

   operator ObjectType *() const
        { return m_Pointer; }

允许隐式转换为指针类型,指针类型又可以转换为 bool

虽然它有效,但通常被认为是一个坏主意:如果你不小心,你可能会意外地存储一个非智能指针,当智能指针销毁它的对象时,它可能会失效。出于这个原因,标准智能指针有一个 explicit operator bool() 允许在 boolean 上下文中使用,还有一个显式的 get() 函数,当你真的想要一个非智能指针。

关于c++ - itk::SmartPointer 是如何转换为 bool 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26137697/

相关文章:

c++ - gcc size_t 和 sizeof 算术转换为 int

C++ 确保浮点大小为 4 个字节

c++ - 在其他线程中迭代该并发 vector 时调用 concurrency::concurrent_vector::push_back 是否是并发安全的?

c++ - 方法在类中的位置

c - 指针类型的char数组的反向引用

c++ - 通过初始标准转换序列区分用户自定义转换序列

c++ - 在 winforms 中创建可移动和可调整大小的线

java - 如何使用 JavaFX 将复选框的值传递给另一个方法?

java - Android 比较 boolean 值

Java - boolean 逻辑 - 无法识别对象