safe-rules icon indicating copy to clipboard operation
safe-rules copied to clipboard

`R14.1` “避免空指针解引用” 空指针的描述可以修改

Open Mq-b opened this issue 1 year ago • 4 comments

原文:

使用 nullptr、NULL、0 等常量初始化的指针是空指针

应改为:“使用 nullptr、NULL、0 这些空指针常量初始化的指针是空指针”。

建议强调“空指针常量”,其实考虑字面量这种说法似乎也可行。

”,事实上没有额外的空指针常量了。

这里的“”不可能表达的是:“零初始化值初始化也初始化指针为它对应的空值。

除非表达的是:“std::nullptr_t 类型的纯右值”,然而它通常就是 nullptr。除非......:

int* p = std::nullptr_t{};

然而感觉这也不太可能是原文表达的“常量”。


写了半天感觉莫名其妙,因为可以简单的描述:

空指针是值为空的指针(通常使用空指针字面量 nullptr,或空指针常量 0、NULL 进行初始化)

之前提过:https://github.com/Qihoo360/safe-rules/pull/32

Mq-b avatar Apr 17 '24 02:04 Mq-b

0L、'\0' 甚至 false、1 - 1,以及 C 语言的 (void*)0 ,也包括 C++ 的 nullptr_t{},都可以作为空指针常量,只是不建议这么用,所以文中用“等常量”来概括了。

当然,“空指针常量” 这个概念是值得进一步强调的,我们后续会进行更严谨的阐述。

brotherbeer avatar Apr 19 '24 06:04 brotherbeer

这是考虑 C 语言导致的,行吧。

Mq-b avatar Apr 19 '24 06:04 Mq-b

0L、'\0' 甚至 false、1 - 1,以及 C 语言的 (void*)0 ,也包括 C++ 的 nullptr_t{},都可以作为空指针常量,只是不建议这么用,所以文中用“等常量”来概括了。

当然,“空指针常量” 这个概念是值得进一步强调的,我们后续会进行更严谨的阐述。

注意 C++11/CWG903'\0'false1 - 1 不再被允许为空指针常量了;C 中仍然允许这些表达式作为空指针常量。

frederick-vs-ja avatar Apr 30 '24 09:04 frederick-vs-ja

0L、'\0' 甚至 false、1 - 1,以及 C 语言的 (void*)0 ,也包括 C++ 的 nullptr_t{},都可以作为空指针常量,只是不建议这么用,所以文中用“等常量”来概括了。 当然,“空指针常量” 这个概念是值得进一步强调的,我们后续会进行更严谨的阐述。

注意 C++11/CWG903'\0'false1 - 1 不再被允许为空指针常量了;C 中仍然允许这些表达式作为空指针常量。

收到~

brotherbeer avatar May 10 '24 07:05 brotherbeer