C++中的结构初始化
Structure initialization in C++
从Android AOSP代码中截取的代码,传感器.cpp具有以下代码。
struct sensors_module_t HAL_MODULE_INFO_SYM = {
common: {
tag: HARDWARE_MODULE_TAG,
version_major: 1,
version_minor: 0,
id: SENSORS_HARDWARE_MODULE_ID,
name: "LGE Sensor module",
author: "LG Electronics Inc.",
methods: &sensors_module_methods,
dso: NULL,
reserved: {0}
},
get_sensors_list: sensors__get_sensors_list,
};
现在我不明白这里:
这里是什么意思?是某种初始化还是其他什么?
我对C++了解不多,所以如果有任何链接或资源来理解这一点,将不胜感激。 通过谷歌搜索我找不到太多。
它是一个特定于编译器的扩展,是指定初始值设定项的过时形式。 此处记录了 gcc 实现。
在 C 语言中,您可能有:
struct point { int x, y; };
struct point p = { 10, 20 };
使用 ISO C99 中引入的指定初始值设定项功能,您可以将其编写为:
struct point { int x, y; };
struct point p = { .x = 10, .y = 20 };
但在 C99 之前,gcc 引入了一个类似的功能,但语法不同:
struct point { int x, y; };
struct point p = { x: 10, y: 20 };
gcc,或者更准确地说是 g++,在C++模式下也支持此功能,但C++尚未采用 C99 样式的指定初始值设定项。
gcc 手册说,这个特性的:
版本自 1993 年发布的 gcc 2.5 以来已经过时了,所以绝对不应该在新代码中使用。
请注意,如果初始值恰好是一个小整数常量,如您的示例所示:
version_major: 1,
version_minor: 0,
它很容易与位字段的语法混淆。
对于 C,只要编译器支持 C99 或更高版本,.name = value
形式就是有效且可移植的。 对于C++,它不是可移植的,但只要您使用 g++ 或与之兼容的编译器(如 clang(,您就可以使用 C99 语法。
相关文章:
- 在C和C++中初始化结构中的数组
- 我们可以用参数化构造函数初始化结构的数组吗?
- 尝试初始化结构内的联合时出错
- 使用其他成员初始化结构的成员?
- 使用构造函数初始化结构还是在之后设置其值更好?
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 如何在另一个结构中初始化结构数组?
- 如何在构造函数中初始化结构体的动态数组?
- 初始化结构中的联合 - c++
- 尝试初始化结构向量时出现编译错误
- 用于初始化结构的 void 指针强制转换
- 初始化结构的两种方式
- 使用用户定义的构造函数初始化C++结构
- 使用初始值设定项列表初始化结构,对于 std::array 失败
- 在 c++ 中初始化结构的指针
- 无序列图会创建一个零初始化结构吗?
- 如何在C++中初始化结构
- C 用结构指针初始化结构
- 在C 中初始化结构数组
- 使用数组聚合初始化结构数组