在C++之前的11天里,编写更好的做法是:
if (ptr == NULL)
Run Code Online (Sandbox Code Playgroud)
而不是:
if (!ptr)
Run Code Online (Sandbox Code Playgroud)
这有两个原因.它效率更高,因为它不需要强制转换为bool.并且无法保证宏NULL确实会评估为布尔值false.这在C++ 11中仍然如此吗?写作是否更可取
if (ptr == nullptr)
Run Code Online (Sandbox Code Playgroud)
而不是
if (!ptr)
Run Code Online (Sandbox Code Playgroud)
或者现在是第二次罚款?
它效率更高,因为它不需要强制转换为bool.
我会打[citation-needed]那个耳光.我怀疑任何现代编译器都能算得上.
if (ptr) 如果您使用该值来表示规范的"缺乏价值",则完全正确并且可能在语义上更正确.
我只希望看到if (ptr != nullptr)有人实际上是否正在使用"null"值进行指针算术,但即使这样,它也是非常粗略的.
话虽这么说,很多时候你可以逃脱...根本没有检查.如果指针的可为空性用于表示可以为空的数据字段,请使用optional.如果你正在初始化它以防它是空的,请使用value_or成语.如果它只是一个弱参考而且价值合约在外面,那么assert就会做.
关于
在 C++11 之前的日子里,更好的做法是这样写:
Run Code Online (Sandbox Code Playgroud)if (ptr == NULL)而不是:
Run Code Online (Sandbox Code Playgroud)if (!ptr)
不,不是消息灵通的人说的。
”这有两个原因。它更高效,因为它不需要转换为 bool。
不,这两个表达式是等价的,一个并不比另一个更有效。“cast”是一种符号。将其与执行效率混为一谈是没有意义的。
”并且不能保证宏 NULL 确实会计算为布尔值 false。
确实有这样的保证。
“这在 C++11 中仍然成立吗?
它在 C++11 和 C++14 中仍然都是 false,在 C++17 中仍然是 false。
| 归档时间: |
|
| 查看次数: |
3559 次 |
| 最近记录: |