与使用全局变量相同,
const double GRAVITY = 9.81;
int main(){}
我想使用全局结构
typedef struct {
double gravity;
} WorldConfig;
WorldConfig WC;
WC.gravity = 9.81;
int main(){}
但这不编译(“WC”没有命名类型)。
有没有办法做到这一点,或者,使用全局结构的一个很好的理由是一个超级坏主意?
THX
答案 0 :(得分:3)
是的,初始化全局变量:
struct WorldConfig
{
double gravity;
};
WorldConfig WC = { 9.82 };
int main() { }
答案 1 :(得分:2)
在C ++中,您不需要typedef
,这不是C.此外,您需要在初始化程序中设置gravity
成员:
struct WorldConfig {
double gravity;
} WC = {9.81};
但是,对于这样的常量,你可能希望它们真的不变,所以你可以这样做:
struct WorldConfig
{
static constexpr double gravity = 9.81; // requires C++11
};
答案 2 :(得分:1)
另一种解决方案是:
在标题中:
struct WC
{
static const double g;
};
在您的源文件中:
const double WC::g = 9.81;
请注意匿名struc和typedef使用的是C风格,而不是C ++。
答案 3 :(得分: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;
}