如何在 c++98 中定义我们自己的 nullptr
How to define our own nullptr in c++98?
实际上我正在编写所有库类的自己的版本,我不想将 STL 文件包含在我的类文件中。因此,例如,我想检查节点是否等于 null。如果我写类似的东西
#define nullptr 0
然后它不适用于其他节点指针(即 Node *root = nullptr
(
如何做到这一点在书中提到:有效C++,Scott Meyers的第2版(新版本可用(在章节中:">项目25:避免指针和数字类型过载。
如果您的编译器不知道 C++11 引入的 nullptr
关键字,则需要它。
const /* this is a const object... */
class nullptr_t
{
public:
template<class T> /* convertible to any type */
operator T*() const /* of null non-member */
{ return 0; } /* pointer... */
template<class C, class T> /* or any type of null */
operator T C::*() const /* member pointer... */
{ return 0; }
private:
void operator&() const; /* Can't take address of nullptr */
} nullptr = {}; /* and whose name is nullptr */
这本书绝对值得一读。
nullptr
相对于NULL
的优势在于,nullptr
的行为类似于真正的指针类型,因此它增加了类型安全性,而NULL
就像在 C++11 之前刚刚设置为 0 的整数。
不应使用关键字标识符定义宏。
即使不使用 STL,也不需要定义自己的 nullptr,因为它不是 STL(也不是标准库(的一部分,而是 (C++( 语言本身的一部分。
相关文章:
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 我们可以访问一个不存在的联盟的成员吗
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 我们可以删除链表中静态内存中的节点吗
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 当我们push_back元素时,std::vector 什么时候会放大自己?
- 如何在 c++98 中定义我们自己的 nullptr
- 编写我们自己的比较操作
- 为什么我们需要维护自己的矩阵来转换游戏对象
- 我们如何让C++程序自己修复超出范围的数组索引
- 没有明显的时间戳与时区偏移类型的c++.卷我们自己的
- Ceil函数:我们如何自己实现它
- 为什么我们需要写一个自己的复制程序,而我们可以使用复制shell命令
- 如何在Thrift客户端中使用我们自己的I/O框架
- 如何编译我的c++库在纯Android Studio的方式(不指定任何.mk文件在我们自己)
- 可以将std::find函数用于我们自己的类
- 如何自定义cin来读取我们自己的格式
- Can运算符<<用于设计我们自己的输出显示方式