gpt4 book ai didi

pointers - C++ 11-一直使用nullptr吗?

转载 作者:行者123 更新时间:2023-12-04 06:39:25 25 4
gpt4 key购买 nike

我只是有点困惑。

什么时候应该使用nullptr?

我已经在某些网站上阅读了应始终使用的内容,但是例如,我无法将nullptr设置为非指针:

int myVar = nullptr; // Not a pointer ofcourse

我是否应该始终对指针使用NULL非指针和nullptr?

感谢任何帮助!我对c++ 11(以及整个c++)非常陌生。

最佳答案

初始化指向空指针值的指针时,请始终使用nullptr,这是根据草稿n3485 的含义。

[lex.nullptr] paragraph 1

The pointer literal is the keyword nullptr. It is a prvalue of type std::nullptr_t. [ Note: std::nullptr_t is a distinct type that is neither a pointer type nor a pointer to member type; rather, a prvalue of this type is a null pointer constant and can be converted to a null pointer value or null member pointer value. [...] — end note ]



现在开始使用 NULL

根据同一草案,其定义如下。

[diff.null] paragraph 1

The macro NULL, [...] is an implementation-defined C ++ null pointer constant in this International Standard.



和空指针常量,如下所示。

[conv.ptr] paragraph 1

A null pointer constant is an integral constant expression [...] prvalue of integer type that evaluates to zero or a prvalue of type std::nullptr_t.



也就是说,将 NULL定义为评估为零的整数prvalue还是 std::nullptr_t类型的prvalue定义为 implementation-defined behavior。如果标准库的给定实现选择前者,则可以将 NULL分配给整数类型,并保证将其设置为零,但是如果选择了后者,则允许编译器发出错误并声明程序格式不正确。

换句话说,尽管条件有效[读取IB],但使用 NULL初始化整数很可能不是一个好主意,而只需使用0即可。

另一方面,根据上面的描述, NULL保证将指针初始化为空指针值,就像 nullptr一样,但是 NULL是一个宏,伴随着一些注意事项, nullptr是特定类型的prvalue,针对其进行类型检查并应用转化规则。这就是为什么应该首选 nullptr的主要原因。

关于pointers - C++ 11-一直使用nullptr吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18775044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com