在 C++ 中如何表达和使用“nothing”?

Cyb*_*ker 2 c++ null

目标

我想知道 C++ 中是否有“null”,就像NonePython 中或nilRuby 中的 a 一样。我也想知道你应该如何使用它。

代码

这是我编写的 C++ 代码。

#include <iostream>

int main()
{
  bool value = _____;      // Are you supposed to use 'null' with a 'bool' type?
  std::cout << value;
}
Run Code Online (Sandbox Code Playgroud)

尝试

我尝试_____nullnilNull和替换Nil,但它们都不起作用!我什至尝试用_____andnone替换None,但我得到的只是这个错误消息(不完整的错误消息):

main.cpp: In function 'int main()':
main.cpp:5:16: error: 'None' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

Repl.it 网站甚至建议None改为clone. 我是不是该?

main.cpp:5:16: note: suggested alternative: 'clone'
Run Code Online (Sandbox Code Playgroud)

那么如何将“null”放入变量中,但 C++ 中是否存在“null”呢?

sco*_*001 5

对于像 a 这样的东西bool,你有两个可能的值,true或者false。不存在第三个“缺乏价值”。

Python(我不能代表 Ruby)实现这种“缺乏价值”的方式是不实际存储truefalse隐藏在表面之下,而是存储存储 true 或 false 的位置的地址。当您询问该值是多少时,它会转到该地址并进行检查。

这样,如果您想要“缺乏价值”,它只需将其存储的地址更改为空地址即可。这允许伪“第三可能值”。

您可以在 C++ 中通过使用布尔指针(即:)来完成此操作bool *b,但这可能不是一个好主意。根据您的情况,几乎肯定有更好的方法来处理“缺乏价值”。

或者,您可以使用enum三个可能的值,即:

enum valState { ISGOOD, ISBAD, ISNULL };
Run Code Online (Sandbox Code Playgroud)

这将允许您执行以下操作:

valState state = ISBAD;
if(state == ISNULL) { ...
Run Code Online (Sandbox Code Playgroud)

  • 我不知道你是如何抵制“{ISGOOD,ISBAD,ISUGLY}”的,而我却无法做到。 (5认同)