gpt4 book ai didi

c++ - C++中的静态结构和静态全局变量

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:40 25 4
gpt4 key购买 nike

有一个 RPC 框架,使用 hessian 作为默认序列化。然后,一些客户需要protobuf。为了兼容那些没有安装protobuf的人,我们将所有protobuf支持放在一个文件中,并根据当前环境(是否有pb)有条件地编译它
该框架有一系列数据类型(Long、String、Map 等),它们中的每一个都有一个单独的序列化器,我们使用一个static struct 来注册这些函数,它看起来像:

/*file register.cc */

在protobuf支持文件中,我们做了类似的事情:

/* pb_support.cc */

两个文件在不同的目录中退出:
在带有 Redhat5.6 的 gcc 4.1.2 中,它运行良好。在gcc 4.8和Ubuntu 13.04中,当protobuf在的时候,pb_object_install总是先执行,但是结果为0,也就是说pb注册的结果已经被抹掉了,所以protobuf协议(protocol)是没有用的。
这是为什么?是否有任何替代品可以完成相同的功能?

最佳答案

全局命名空间中变量的初始化是在单个translation unit中的声明顺序 。但是,translation units 之间的初始化顺序未指定。

这意味着如果你有两个源文件,你不能说哪个文件变量将首先被初始化。如果一个源文件中的变量依赖于另一个首先初始化的源文件中的变量,那当然会导致问题。

关于c++ - C++中的静态结构和静态全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24906450/

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