gpt4 book ai didi

c++ - 不理解静态 boolean 行为

转载 作者:太空狗 更新时间:2023-10-29 20:00:21 29 4
gpt4 key购买 nike

我有一个头文件,其中包含一些可供我所有文件使用的静态变量。我在那里有一个 boolean 变量初始化为 0 -

//in utility.h
static bool read_mess = false;

如果 --view-read-messages 在命令行参数中,我想更改为 true,这样当我从客户端收到消息时,我可以做这样的事情 -

//code from a different file
if(UTILITY_H::read_mess)
std::cout<<"\nMessage successfully received from Client 2: "<<in2;

在 main 中,我检查命令行参数并将变量 read_mess 设置为 true -

//this is in a for, where temp is the command line arg[i]
else if(strcmp(temp.c_str(), "--view-read-messages") == 0) {
UTILITY_H::read_mess = true;
}

我可以在 main 中的这一行之后打印 read_mess 的值,它说它是真的。但是当我在上面发布的 if 语句中检查它是否为真时,read_mess 又回到了假。为什么会这样?我确定这只是一些简单的事情,但我似乎无法让它发挥作用。每次执行 UTILITY_H::时,utility.h 中的所有变量都重新初始化了吗?如果是这样,为什么?

最佳答案

static 在此上下文中表示“本地”(对于翻译单元)。您的程序中将有多个 read_mess 拷贝,每个翻译单元一个,这与头文件是一回事。 (在您的情况下,您很可能可以将“翻译单元”近似为 .cpp 或 .c 或 .cc 文件)。

可能您打算做的是声明 extern 变量,或static 类成员 和 < em>在一个翻译单元中定义它。

在实践中使用 extern 意味着在你想要写的头文件中:

extern bool read_mess;

但在一个也是唯一一个不是标题的其他地方:

bool read_mess = false;

关于c++ - 不理解静态 boolean 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7475553/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com