接收到非空内容后,全局字符串保持为空

时间:2016-09-29 20:48:44

标签: c++

我今天早上在工作中遇到了一些奇怪的东西,我真的需要谈论它,我在头文件中的一个未命名的命名空间中有一个字符串对象,最后一个包含在主cpp文件和其他cpp文件中。

在main()中,我注意到当这个全局字符串对象使用其=运算符来设置从函数返回的值(非空字符串)时,它保持为空!而如果我用本地字符串更改全局字符串,则使用新内容正确更新此字符串。我记得遇到过来自全局变量的怪异行为,我真的想知道发生了什么。它就像编译器没有正确编译程序一样......

是否有些人遇到类似全局变量的事情,并了解发生了什么?

我通过用类重新定义未命名的命名空间并在其中声明字符串static来解决问题。

2 个答案:

答案 0 :(得分:2)

如果您的字符串是在头文件中声明的,并且您的头文件包含在不同的.cpp文件中,那么您不会有一个全局变量,但是您要为一个单独的全局变量声明一个单独的全局变量每个.cpp文件。

https://en.wikipedia.org/wiki/Translation_unit_(programming)

How to share one static variable with multiple translation unit?

答案 1 :(得分:2)

不要在头文件中使用未命名的命名空间。

未命名的命名空间将为其包含的每个文件创建一个新的匿名命名空间,而未命名的命名空间只能在文件中出现一次,因此只能使用一个带有未命名命名空间的标头。

使用命名的命名空间或类(就像你在问题中提到的那样)会更好。