我在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。