use*_*429 8 pointers nullptr c++11
我只是有点困惑.
我什么时候应该使用nullptr?
我已经在一些网站上看到应该总是使用它,但是我不能为非指针设置nullptr,例如:
int myVar = nullptr; // Not a pointer ofcourse
Run Code Online (Sandbox Code Playgroud)
我应该总是使用NULL非指针和nullptr指针吗?
感谢任何帮助!我对c ++ 11(和c ++整体)很新.
始终nullptr
在初始化指向空指针值的指针时使用,这就是根据草案n3485的含义.
[lex.nullptr]第1段
指针文字是关键字nullptr.它是std :: nullptr_t类型的prvalue.[注意:std :: nullptr_t是一个不同的类型,既不是指针类型也不是指向成员类型的指针; 相反,这种类型的prvalue是一个空指针常量,可以转换为空指针值或null成员指针值.[...] - 结束说明]
现在就使用了NULL
.
根据同一草案,其定义如下.
[diff.null]第1段
宏NULL,[...]是 本国际标准中实现定义的C++空指针常量.
和null指针常量如下.
[conv.ptr]第1段
甲空指针常数是整数表达式[...]的计算结果为零或类型的std的prvalue :: nullptr_t整型prvalue.
也就是说,它是实现定义的行为,无论NULL
是定义为求值为零的整数prvalue还是类型的prvalue std::nullptr_t
.如果标准库的给定实现选择前者,则NULL
可以将其分配给整数类型,并保证将其设置为零,但如果选择了后者,则允许编译器发出错误并声明程序生病-formed.
换句话说,尽管有条件有效[ 读取IB ],但使用初始化整数NULL
可能是一个坏主意,只需使用0即可.
另一方面,根据上面NULL
保证初始化指向空指针值的指针,很像nullptr
,但是虽然NULL
是一个宏,伴随着几个警告,nullptr
是特定类型的prvalue,适用于类型检查和转换规则.这主要是为什么nullptr
应该首选.