0

与使用全局变量一样,

const double GRAVITY = 9.81;

int main(){}

我想使用全局结构

typedef struct {
    double gravity;
} WorldConfig;

WorldConfig WC;
WC.gravity = 9.81;

int main(){}

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

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

谢谢

4

4 回答 4

3

是的,初始化全局变量:

struct WorldConfig
{
    double gravity;
};

WorldConfig WC = { 9.82 };

int main() { }
于 2013-04-17T07:44:48.620 回答
2

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

struct WorldConfig {
    double gravity;
} WC = {9.81};

但是,对于这样的常量,您可能希望它们真正保持不变,因此您可以这样做:

struct WorldConfig
{
    static constexpr double gravity = 9.81; // requires C++11
};
于 2013-04-17T07:46:03.577 回答
1

另一种解决方案是:

在您的标题中:

struct WC
{
   static const double g;
};

在您的源文件中:

const double WC::g = 9.81;

请注意,匿名 struc 和 typedef 使用是 C 风格,而不是 C++。

于 2013-04-17T07:47:12.943 回答
1

即使你把它放在一个类或结构的范围内,如果它是静态的,它仍然是一个全局的。

将它放在结构中将在元编程世界中很有用,即

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;
}
于 2013-04-17T08:04:45.620 回答