相关疑难解决方法(0)

什么是nullptr?

我们现在拥有许多新功能的C++ 11.一个有趣且令人困惑的(至少对我来说)是新的nullptr.

嗯,不再需要令人讨厌的宏了NULL.

int* x = nullptr;
myclass* obj = nullptr;
Run Code Online (Sandbox Code Playgroud)

尽管如此,我还没有得到如何nullptr运作.例如,维基百科的文章说:

C++ 11通过引入一个new 关键字作为一个区分空指针常量来解决这个问题:nullptr.它的类型为nullptr_t,它是可隐式转换的,可与任何指针类型或指向成员类型的类型相媲美.除了bool之外,它不可隐式转换或与整数类型相比.

它是一个关键字和一个类型的实例?

另外,你有另一个例子(在维基百科旁边)哪里nullptr优于好老0

c++ pointers nullptr c++11

546
推荐指数
8
解决办法
31万
查看次数

249
推荐指数
7
解决办法
7万
查看次数

删除指针后将指针NULL化是一种好习惯吗?

我首先要说的是,使用智能指针,你永远不必担心这一点.

以下代码有什么问题?

Foo * p = new Foo;
// (use p)
delete p;
p = NULL;
Run Code Online (Sandbox Code Playgroud)

这是由另一个问题的回答和评论引发的.Neil Butterworth的一条评论产生了一些赞成:

在删除后将指针设置为NULL不是C++中的通用优良做法.有时候它是一件好事,有时它是毫无意义的,可以隐藏错误.

有很多情况下它无济于事.但根据我的经验,它不会伤害.有人开导我.

c++ null pointers dynamic-allocation

139
推荐指数
6
解决办法
8万
查看次数

在c ++ 0x中删除nullptr仍然是安全的吗?

c++03它是很清楚,删除一个空指针没有任何效果.实际上,它明确指出§5.3.5/2:

在任一替代方案中,如果delete的操作数的值是空指针,则操作无效.

然而,在目前的草案对于c++0x这句话似乎缺少.在草稿的其余部分,我只能找到句子,说明如果delete-expression的操作数不是空指针常量会发生什么.是否删除仍然定义的空指针c++0x,如果是,在哪里?

笔记:

有大量的间接证据表明它仍然有明确的定义.

首先,有两句话§5.3.5/2说明

在第一个替代(删除对象)中,delete的操作数的值可以是空指针值,...

在第二个替代(删除数组)中,delete的操作数的值可以是空指针值或...

这些说操作数被允许为空,但是它们自己实际上并没有定义如果是的话会发生什么.

其次,改变意义delete 0是一个重大的突破性变化,标准委员会不太可能做出这种特殊的改变.此外,没有提到这是c++0x草案兼容性附件(附件C)的重大变化.但是,附件C是一个信息性部分,因此对标准没有任何解释.

另一方面,删除空指针要求无效的事实意味着额外的运行时检查.在很多代码中,操作数永远不能为空,因此这个运行时检查与零开销原则相冲突.也许委员会刚刚决定改变行为,使标准c ++更符合语言的既定设计目标.

c++ null language-lawyer delete-operator

73
推荐指数
2
解决办法
4万
查看次数

如何在c ++ 98中定义我们自己的nullptr?

实际上我正在编写我自己的所有库类的版本,我不想将STL文件包含到我的类文件中.因此,例如,我想检查节点是否等于null.如果我写的东西像

#define nullptr 0
Run Code Online (Sandbox Code Playgroud)

然后它不使用其他节点指针(即Node *root = nullptr)

c++ nullptr

-3
推荐指数
2
解决办法
1503
查看次数