与使用全局变量一样,
const double GRAVITY = 9.81;
int main(){}
我想使用全局结构
typedef struct {
double gravity;
} WorldConfig;
WorldConfig WC;
WC.gravity = 9.81;
int main(){}
但这不会编译(“WC”没有命名类型)。
有没有办法做到这一点,或者,为什么使用全局结构是一个非常糟糕的主意?
谢谢
是的,初始化全局变量:
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;
请注意,匿名 struc 和 typedef 使用是 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;
}