sam*_*sam 0 c++ smart-pointers shared-ptr unique-ptr c++11
让我们p成为共享/唯一指针.是if (p)与if (p.get())相同呢?
如果不是,这些条件或条件中的代码在什么情况下表现不同?
从cppreference我读到std::shared_ptr::operator bool检查是否get() != nullptr.这是确切的实施operator bool吗?
"确切的实现"不应该是您的关注点(它将随编译器的不同而不同,从版本到版本,并且可能基于您提供给编译器的选项)
您的关注应该是"符合标准的编译器将如何运行",答案是"是的,if(ptr)应始终产生与之相同的结果"if(ptr.get())
从标准:
算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue.零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.类型为std :: nullptr_t的prvalue可以转换为bool类型的prvalue; 结果值为false.
智能指针计为 可空指针,具有以下要求:
类型P的对象p可以在上下文中转换为bool(Clause [conv]).效果应该像p!= nullptr一样被评估代替p.
(感谢TC的报价)
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |