问题标签 [struct]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
5331 浏览

c# - 长寿命对象的结构与类

当您需要非常小的对象时,比如说包含 2 个 float 属性,并且您将拥有数百万不会立即“销毁”的对象,是结构体还是类更好的选择?

就像在 xna 作为一个库一样,有 point3s 等作为结构,但是如果你需要长时间保持这些值,它会不会对性能造成威胁?

0 投票
9 回答
12985 浏览

c# - 结构的不变性

可能重复:
为什么可变结构是邪恶的?

我在很多地方都读过它,包括这里,最好将结构设为不可变。

这背后的原因是什么?我看到许多 Microsoft 创建的可变结构,例如 xna 中的结构。BCL 中可能还有更多。

不遵守本指南的利弊是什么?

0 投票
6 回答
4656 浏览

c - long long 对齐问题(MSVC vs. GCC)

我正在编写 C 跨平台库,但最终我的单元测试出现错误,但仅限于 Windows 机器上。我已经跟踪了这个问题,发现它与结构的对齐有关(我正在使用结构数组来保存多个相似对象的数据)。问题是: memset(sizeof(struct)) 和一个一个地设置结构成员会产生不同的字节到字节的结果,因此 memcmp() 返回“不相等”的结果。

这是用于说明的代码:

此代码与 MSVC 2003 @ Windows 产生以下输出:

但是与 GCC 3.3.6 @ Linux 相同的代码可以按预期工作:

这使我的单元测试非常困难。

我是否正确理解 MSVC 使用最大本机类型(long long)的大小来确定与结构的对齐方式?

有人可以给我建议如何更改我的代码以使其更强大地应对这种奇怪的对齐问题吗?在我的真实代码中,我通过通用指针使用结构数组来执行 memset/memcmp,我通常不知道确切的类型,我只有 sizeof(struct) 值。

0 投票
8 回答
592195 浏览

c++ - C++中'struct'和'typedef struct'的区别?

C++中,有什么区别:

和:

0 投票
7 回答
13242 浏览

c++ - 在 C++ 中初始化位域结构的最佳方法是什么?

在 C++ 中,我有一个包含匿名位域结构的类。我想将其初始化为零,而不必手动写出所有字段。

我可以想象将初始化放在三个地方:

  1. 在位域中创建构造函数
  2. 在包含类的构造函数的初始化列表中清零
  3. 在包含类的构造函数主体中清零

这个位域有很多字段,我不想一一列举。

例如看下面的代码:

其中之一更可取吗?还是我还缺少其他东西?

编辑:根据下面接受的答案(由 Ferruccio 提供),我选择了这个解决方案:

0 投票
3 回答
12267 浏览

c - struct c 动态分配内存

我正在使用一个结构,我想初始化最多 10 个端口。但是,当程序运行时,它可能会少很多,直到运行时我们才知道。但是,这将是最大值。我以前从未做过这样的 struct ,因为我通常使用 calloc 和 delcare 动态分配 *ports 作为值类型。

但是,我无法理解这一点

看起来我正在分配一个指向自由存储上分配的 2 个端口对象的单个指针?

我不明白为什么我将点运算符与箭头运算符一起使用?端口[0]->port_id = 20;printf("port_id: %d\n", 端口[0]->port_id);

通常,我在传递中所做的是:

然后使用以下任一项进行分配。但是,之前的程序员已经声明了我在顶部显示的所有内容,因此我无法更改任何内容。

非常感谢您的任何建议,

0 投票
4 回答
41140 浏览

c - 未定义的 C 结构前向声明

我有一个头文件 port.h、port.c 和我的 main.c

我收到以下错误:“ports”使用未定义的结构“port_t”

我想我已经在我的 .h 文件中声明了结构并且在 .c 文件中具有实际结构是可以的。

我需要前向声明,因为我想在我的 port.c 文件中隐藏一些数据。

在我的 port.h 中,我有以下内容:

端口.c:

主.c:

非常感谢您的任何建议,

0 投票
8 回答
14162 浏览

c++ - 直接访问结构成员

我有一个测试结构定义如下:

在某处我以这种方式使用它:

这在我的 Windows 上正常工作 - 它按预期打印 15,但它安全吗?我真的可以确定变量在我想要的内存中的位置吗?特别是在这种组合结构的情况下(例如 f 在我的编译器上是第五个单词,但它是第六个变量)?

如果没有,是否有任何其他方法可以直接操作 struct 成员,而无需在代码中实际使用 struct->member 构造?

0 投票
5 回答
30889 浏览

c - 结构 calloc c

C99 海合会

我不断收到此错误。我在 main 外面有一个结构。在 main 内部,我尝试使用 calloc 在堆栈上进行分配。我似乎无法找出问题所在。

感谢您的任何建议,

错误:')' 标记之前的预期表达式

0 投票
4 回答
178 浏览

language-agnostic - 在大型项目中拥有超过 65536 个用户定义类型是否合理?

我正在考虑一些与运行时类型信息相关的东西,我想从从事比我大得多的项目的程序员那里得到一些反馈。期望任何程序在单个项目中拥有超过 65536 (2^16) 个用户定义类型(类和结构)是否完全合理?这并不意味着65536 个实例,它意味着 65536 个类型。如果编译器在任何一个项目中将您限制为 65536 个类/结构,这在实践中是否重要?