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

标签 c++ static header boolean

我有一个头文件,其中包含一些可供我所有文件使用的静态变量。我在那里有一个 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/

相关文章:

java - 如何使用 clojure 的 Gen 类生成静态方法?

html - 文本不会出现在页眉上

c++ - 如何获取对象的名称

c++ - 使用 BNF 语法提取信息

c++ - 未找到默认构造函数

java - 想要静态但不能支持?

c# - 为什么静态 RegEx 比实例 RegEx 慢?

c - "Implicit declaration"警告

linux - 为什么curl没有发布我的标题

c++ - 第一个 C++ 类(class),对某些事情不确定。特别是“const std::string& 提示