c++:全局结构
C++ : global structure
与使用全局变量相同,
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;
}
相关文章:
- 带参数的数据结构的全局声明
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 在两个.cpp文件之间定义全局类/结构指针
- 是否可以在C++ (C) 中使用全局范围对象(结构)?
- 在结构声明的分号之前声明的结构变量是否为全局变量
- C 和 C++ 标头:在另一个结构内定义全局结构
- 全局结构C
- 如果将其添加为全局结构,则如何将其添加为NULL
- 访问全局数据结构
- 未调用静态全局结构的析构函数
- 将大小设置为结构类型全局变量时发生编译器错误
- C 全局结构创造了名称冲突
- 我是否可以在类似于 C# 的 C++ 中创建全局命名空间层次结构,以帮助开发人员使用我们的代码?
- 使结构内定义的枚举具有全局范围C++
- c++链接错误,找不到全局.h结构
- 全局声明的数据结构可以有多大
- 函数调用重置传递的全局结构的字段
- 在C++中声明头文件中的全局结构
- 为什么不允许全局的结构/联合子项作为模板引用参数 - 而是全局变量本身