gpt4 book ai didi

C++:静态变量不会在文件之间持久存在

转载 作者:太空狗 更新时间:2023-10-29 23:23:33 25 4
gpt4 key购买 nike

我有一个带有一堆常量的 config.h 文件。在 main.cpp 中,它将其中一个常量设置为某个值,然后调用 util.cpp 中的一个函数。

util.cpp也包含config.h,但是main.cpp设置的变量没有相同的值。

代码:

配置.h:

static int MAX_NUMBER_OF_TRAINING_DATA = 1000;

main.cpp(主要):

else if (strcmp(argv[i], "-mTrnData") == 0)
{
MAX_NUMBER_OF_TRAINING_DATA = atoi(argv[i + 1]);
cout << "Number of data sets to be generated: " << MAX_NUMBER_OF_TRAINING_DATA << "\n\n";
// prints what I tell it
}

在 utils.cpp 中

cout << "Number of data sets generated: " << MAX_NUMBER_OF_TRAINING_DATA << "\n\n";
// prints the default value (in this case, 1000)

那么,我该如何解决这个问题,以便我可以在整个 cpp 文件中记住我的 config.h 常量文件?

在 Java 中,您可以执行 Config.NAME_OF_CONSTANT ,因此,如果有一种方法可以在 C++ 中执行此操作,那将是最重要的。

我知道常量不应该改变,但它们唯一改变的时间是在 main() 中读取运行程序的参数时......之后它们就不会改变。

最佳答案

每个翻译单元都会收到自己的static 数据拷贝。

验证这一点的最简单方法是在两个单元中打印 MAX_NUMBER_OF_TRAINING_DATA 的地址 - 它会有所不同。为避免它,在 header 中将其声明为 extern 并在一个单元中定义一次,例如在 main.cpp 中。

除此之外,拥有这样的全局变量是邪恶的(其命名方案甚至暗示我们正在谈论常量!)。您可能会考虑重构代码,例如使用 getter GetMaxNumberOfTrainingData() 使值可用,同时将对它的写入访问权限限制在单个单元内。

关于C++:静态变量不会在文件之间持久存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5501948/

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