0

例如:

object* pObject = nullptr;

或者:

object* pObject = 0;

同样,哪一个性能更好?

4

3 回答 3

4

nullptr是类型的std::nullptr_t,因此构造函数被重载。这意味着它为 null 的事实在类型中进行了编码,因此理论上可以通过避免条件来更快。

指针显然没有重载的构造函数,因此无论您使用0还是nullptr无关紧要。相同的机器代码,相同的性能。

无论如何,nullptr当你想要一个空指针时就去吧。小心,0因为它会调用整数重载而不是指针。

于 2012-11-03T04:23:34.733 回答
2

它们完全一样。0文字可用于初始化指针的事实纯粹是语言语法的一部分并由编译器处理;结果与使用nullptr初始化指针相同:您得到一个空指针。

nullptr是类型系统的一部分,与生成的机器码无关。(它的存在是为了有一个指针类型的文字,它过去并不存在。)

于 2012-11-03T04:27:17.850 回答
0

我假设您指的是 std::string。

我还假设您打算输入string* mystr = 0;. 如果不是指针,则不能为空。

他们几乎可以肯定编译成完全相同的东西,使用你喜欢的任何东西。


编辑为object*,我的答案是一样的。这两者几乎肯定会编译成相同的东西,所以使用你喜欢的任何东西。

于 2012-11-03T04:21:44.693 回答