R值是否可以等于nullptr

  • 本文关键字:nullptr 是否 c++
  • 更新时间 :
  • 英文 :


我在C++类中有以下函数:

CLASS_TYPE& operator=(const char* const &&rhs)

rhs会等于nullptr吗?换句话说,如果rhs等于nullptr,我是否需要检查运算符定义?

nullptr在指针可能取值范围内。试图在编译时阻止这种情况发生是徒劳的,因为您总是可以在运行时将指针的值设置为nullptr

如果您打算接收非空字符串文字,只需使用std::string_view或对字符数组的引用:

// Never null
CLASS_TYPE& operator=(std::string_view rhs);
// Never null either
template<std::size_t n>
CLASS_TYPE& operator=(char const(&rhs)[n]);

Null不在字符串视图或对char数组的引用的可能值内。

按如下方式测试代码确实会将nullptr传递给函数。

CLASS_TYPE x;
x = nullptr;

需要检查rhs是否为null。

最新更新