C++ 性能方面,使用';nullptr';或者只是';0';?

C++ 性能方面,使用';nullptr';或者只是';0';?,c++,performance,visual-c++,c++11,C++,Performance,Visual C++,C++11,例如: object* pObject = nullptr; 或: 再说一次,哪一个性能更好?我假设您指的是std::string 我还假设您打算键入string*mystr=0。如果不是指针,则不能为null 它们几乎可以肯定编译成完全相同的东西,使用任何你喜欢的东西 如果编辑为对象*,我的答案是一样的。这两者几乎肯定会编译成相同的东西,所以可以随意使用。我假设您指的是std::string 我还假设您打算键入string*mystr=0。如果不是指针,则不能为null 它们几乎可以肯定编

例如:

object* pObject = nullptr;
或:


再说一次,哪一个性能更好?

我假设您指的是std::string

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

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



如果编辑为
对象*
,我的答案是一样的。这两者几乎肯定会编译成相同的东西,所以可以随意使用。

我假设您指的是std::string

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

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



如果编辑为
对象*
,我的答案是一样的。这两者几乎肯定会编译成相同的东西,所以可以随意使用。

nullptr
的类型是
std::nullptr\t
,因此构造函数会被重载。这意味着它为null的事实是在类型中编码的,因此理论上,通过避免使用条件表达式,它可以更快

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


无论如何,如果需要空指针,请使用
nullptr
。小心
0
,因为它将调用整数重载而不是指针。

nullptr
属于
std::nullptr\t
类型,因此构造函数将重载。这意味着它为null的事实是在类型中编码的,因此理论上,通过避免使用条件表达式,它可以更快

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


无论如何,如果需要空指针,请使用
nullptr
。小心
0
,因为它将调用整数重载而不是指针。

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


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

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


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

它们完全相同。查看程序集输出,看它们是否完全相同。查看程序集输出。请参见,这有点帮助。-1声称使用null literal
0
在某种程度上不太安全。@BenVoigt更新了答案,这解决了问题吗?是的,更好。但你仍然不应该谈论“整数”。这是文字
0
,除此之外,没有其他东西在讨论中。@BenVoigt:literal
0
的类型肯定是
int
?谢谢,这有点帮助。-1因为他声称使用空文字
0
在某种程度上不太安全。@BenVoigt更新了答案,这解决了吗?是的,这更好。但你仍然不应该谈论“整数”。讨论的是文字
0
,没有其他内容。@BenVoigt:文字
0
的类型肯定是
int
object* pObject = 0;