c++:全局结构

C++ : global structure

本文关键字:结构 全局 c++      更新时间:2023-10-16

与使用全局变量相同,

const double GRAVITY = 9.81;
int main(){}

我想使用全局结构

typedef struct {
    double gravity;
} WorldConfig;
WorldConfig WC;
WC.gravity = 9.81;
int main(){}

但这不会编译("WC"没有命名类型)。

是否有办法做到这一点,或者,为什么使用全局结构体是一个非常糟糕的主意?

thx

是,初始化全局变量:

struct WorldConfig
{
    double gravity;
};
WorldConfig WC = { 9.82 };
int main() { }

在c++中不需要typedef,这不是C。此外,您需要在初始化式中设置gravity成员:

struct WorldConfig {
    double gravity;
} WC = {9.81};
然而,对于这样的常量,您可能希望它们是真正的常量,因此您可以这样做:
struct WorldConfig
{
    static constexpr double gravity = 9.81; // requires C++11
};

另一个解决方案是:

标题:

struct WC
{
   static const double g;
};

在源文件中:

const double WC::g = 9.81;

请注意匿名结构和类型定义是C风格的,而不是c++。

即使你把它放到类或结构体的作用域中,如果它是静态的,它仍然是全局的。

把它放在一个结构体中在元编程的世界里是很有用的,例如

struct Earth
{
   static const double gravity;
};
struct Mars
{
   static const double gravity;
};
// pseudo code
template< typename PLANET >
someFuncOrClass
{
     using PLANET::gravity;
}

这在编译时得到解决(与使Planet成为一个具有重力属性的类相比)。

然而,另一个明显的作用域选择是命名空间。
namespace WC
{
     static double gravity;
}