Questions tagged «struct»

各种编程语言中的关键字,其语法类似于或衍生自C(C ++,C#,Swift,Go,Rust等)。使用特定的编程语言标签来标记涉及使用“ struct”的问题,因为语法和语义可能取决于语言。关键字定义或声明由其他数据类型组成的数据类型。结构的每个成员都有其自己的内存区域(与“ union”相反,后者的成员共享一个内存区域)。

8
在C ++中比较结构时找不到==运算符
比较以下结构的两个实例,我收到一个错误: struct MyStruct1 { MyStruct1(const MyStruct2 &_my_struct_2, const int _an_int = -1) : my_struct_2(_my_struct_2), an_int(_an_int) {} std::string toString() const; MyStruct2 my_struct_2; int an_int; }; 错误是: 错误C2678:二进制'==':未找到采用类型为'myproj :: MyStruct1'的左侧操作数的运算符(或没有可接受的转换) 为什么?

12
C ++元组与结构
使用astd::tuple和仅数据之间有什么区别struct吗? typedef std::tuple<int, double, bool> foo_t; struct bar_t { int id; double value; bool dirty; } 从网上发现的地方,我发现有两个主要区别:struct更具可读性,而则tuple具有许多可以使用的通用功能。是否应该有明显的性能差异?此外,数据布局是否彼此兼容(可互换转换)?
95 c++  struct  tuples 

10
结构与类
我将在代码中创建100,000个对象。它们很小,只有2个或3个属性。我将它们放在通用列表中,当它们存在时,将循环它们并检查value a,也许更新value b。 将这些对象创建为类还是结构更快/更好? 编辑 一个。属性是值类型(除了我认为的字符串?) b。他们可能(我们不确定)有一个有效的方法 编辑2 我想知道:垃圾收集器是否平等地处理了堆和堆栈上的对象,或者工作原理有所不同?
93 c#  struct 

2
C ++结构的函数
通常我们可以为C ++结构定义一个变量,如 struct foo { int bar; }; 我们还可以为结构定义函数吗?我们将如何使用这些功能?
93 c++  function  struct 

6
为什么C ++不允许匿名结构?
一些C ++编译器允许匿名联合和结构作为标准C ++的扩展。这是一种语法糖,偶尔会很有帮助。 有什么理由阻止它成为标准的一部分?有技术障碍吗?哲学的?还是只是不足以证明其合理性? 这是我正在谈论的示例: struct vector3 { union { struct { float x; float y; float z; }; float v[3]; }; }; 我的编译器会接受这一点,但警告“无名结构/联合”是C ++的非标准扩展。
92 c++  struct  unions 

9
将结构初始化/重置为零/空
struct x { char a[10]; char b[20]; int i; char *c; char *d[10]; }; 我填写此结构,然后使用值。在下一次迭代中,我想将所有字段重置为0或null我开始再使用它之前。 我怎样才能做到这一点?我可以使用,memset还是必须仔细检查所有成员,然后逐个进行?

9
结构实现接口安全吗?
我似乎还记得读过一些有关结构如何通过C#在CLR中实现接口的弊端,但是我似乎找不到任何东西。不好吗 这样做会有意想不到的后果吗? public interface Foo { Bar GetBar(); } public struct Fubar : Foo { public Bar GetBar() { return new Bar(); } }
92 c#  interface  struct 

5
为什么此结构大小为3而不是2?
我已经定义了这个结构: typedef struct { char A:3; char B:3; char C:3; char D:3; char E:3; } col; 该sizeof(col)给我3的输出,但它不应该是2?如果仅评论一个元素,sizeof则为2。我不明白为什么:3个元素的5个元素等于15位,并且小于2个字节。 定义这样的结构时是否存在“内部尺寸”?我只需要澄清一下,因为从到目前为止的语言概念来看,我期望的大小为2字节,而不是3字节。
91 c++  c  struct 

6
未使用的成员变量会占用内存吗?
初始化成员变量而不引用或使用它会在运行时进一步占用RAM,还是编译器只是忽略该变量? struct Foo { int var1; int var2; Foo() { var1 = 5; std::cout << var1; } }; 在上面的示例中,成员'var1'得到一个值,该值然后显示在控制台中。但是,根本不使用“ Var2”。因此,在运行时将其写入内存将浪费资源。编译器会考虑这种情况,而只是忽略未使用的变量,还是Foo对象总是相同大小,而不管其成员是否被使用?
91 c++  memory  struct 

11
将c-struct放入NSArray的最佳方法是什么?
将c结构存储在中的通常方法是NSArray什么?优点,缺点,内存处理? 值得注意的是,有什么之间的区别valueWithBytes和valueWithPointer -由Justin及以下鲶鱼提出。 这是苹果valueWithBytes:objCType:为将来的读者讨论的链接... 对于某些横向思考并更多地关注性能,Evgen提出了STL::vector在C ++中使用的问题。 (这引起了一个有趣的问题:是否有一个快速的c库,它没有什么不同,STL::vector但很轻巧,可以最小化“整齐地处理数组” ...?) 所以原来的问题... 例如: typedef struct _Megapoint { float w,x,y,z; } Megapoint; 那么:将自己的结构存储在中的通常的,最佳的,惯用的方法NSArray是什么?如何处理该成语中的记忆? 请注意,我特别在寻找用于存储结构的惯用语。当然,可以通过开设一小堂新课来避免这一问题。但是,我想知道将结构实际放入数组中的常用习惯,谢谢。 顺便说一句,这也许是NSData方法吗?不好... Megapoint p; NSArray *a = [NSArray arrayWithObjects: [NSData dataWithBytes:&p length:sizeof(Megapoint)], [NSData dataWithBytes:&p length:sizeof(Megapoint)], [NSData dataWithBytes:&p length:sizeof(Megapoint)], nil]; BTW作为参考,并感谢Jarret Hardie,这是在其中存储CGPoints和类似内容的方法NSArray: NSArray *points = [NSArray arrayWithObjects: [NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)], [NSValue valueWithCGPoint:CGPointMake(6.9, …


5
为什么C和C ++支持在结构中对数组进行成员分配,但通常不支持?
我了解不支持数组的成员分配,因此以下操作将不起作用: int num1[3] = {1,2,3}; int num2[3]; num2 = num1; // "error: invalid array assignment" 我只是接受这一事实,认为该语言的目的是提供一个开放式框架,并让用户决定如何实现某些功能,例如复制数组。 但是,以下方法确实有效: struct myStruct { int num[3]; }; struct myStruct struct1 = {{1,2,3}}; struct myStruct struct2; struct2 = struct1; 该阵列num[3]是构件明智从它的实例在分配struct1到其实例在struct2。 为什么结构支持数组的成员分配,但通常不支持? 编辑:在结构中std :: string线程中Roger Pate的注释-复制/分配问题?似乎指出了答案的总体方向,但我自己知道的还不够。 编辑2:许多出色的回应。我之所以选择Luther Blissett,是因为我主要想知道该行为背后的哲学或历史原理,但是James McNellis对相关规范文档的引用也很有用。



3
C中的结构内存布局
我有C#背景。我是C之类的底层语言的新手。 在C#中,struct默认情况下,的内存由编译器布置。编译器可以重新排序数据字段或隐式填充字段之间的其他位。因此,我必须指定一些特殊属性来覆盖此行为,以实现准确的布局。 AFAIK,C在struct默认情况下不会重新排序或对齐的内存布局。但是,我听说很难找到一个例外。 C的内存布局行为是什么?什么应该重新排序/对齐而不是?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.