在c或c++中,如何区分在内存地址上设置的0和由于该地址未初始化而设置的0

in c or c++, how can you distinguish between 0 which is set on an address in memory and 0 which is set because that address is not initialized?

本文关键字:设置 地址 于该 初始化 c++ 何区 内存      更新时间:2023-10-16

我的代码中有一个if条件,我检查在内存中的特定地址中设置的值。如果这个值是0,那么我假设这个地址没有设置,并将执行一些操作。但也有可能在我做这个检查时,value为0因为我在代码的其他地方设置了它为0。我如何区分这两种情况?

你没有。没有办法区分0和0

你不能。你需要定义一个额外的静态变量,比如

int initialized = 0;

并将其设置为1,当您为内存位置分配任何新值时。然后可以测试if(initialized)...区分0和0。

不能区分不同的'0',0就是0。用一个二元变量表示两个以上的状态本身也是困难的。据我所知,你不止有两个州。1. 变量=0未初始化,执行操作。2. 变量=1初始化,做其他事情。3.变量=0并初始化,做不同的事情。如果不使用附加信息,就无法理解状态。因此,您可以使用另一种数据结构来保存更多信息。

这两个零是无法区分的。

可以使用std::pair<T, bool>封装T类型变量的初始化状态(在bool中)。

(std::pair<T, bool>在c++标准库中用作插入std::map的返回值)