初始化成员变量而不引用或使用它会在运行时进一步占用RAM,还是编译器只是忽略该变量?
struct Foo {
int var1;
int var2;
Foo() { var1 = 5; std::cout << var1; }
};
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,成员'var1'得到一个值,该值然后显示在控制台中。但是,根本不使用“ Var2”。因此,在运行时将其写入内存将浪费资源。编译器会考虑这种情况,而只是忽略未使用的变量,还是Foo对象总是相同大小,而不管是否使用其成员?
一些C++编译器允许匿名联合和结构作为标准C++的扩展.这有点语法糖,偶尔会非常有帮助.
阻止它成为标准一部分的理由是什么?是否存在技术障碍?一个哲学的?或者仅仅是不足以证明它的合理性?
这是我正在谈论的样本:
struct vector3 {
union {
struct {
float x;
float y;
float z;
};
float v[3];
};
};
Run Code Online (Sandbox Code Playgroud)
我的编译器会接受这个,但它警告"无名结构/联合"是C++的非标准扩展.
有谁知道答案和/或有关于它的意见?
由于元组通常不会很大,我认为使用结构比使用类更有意义.怎么说你?
struct x {
char a[10];
char b[20];
int i;
char *c;
char *d[10];
};
Run Code Online (Sandbox Code Playgroud)
我正在填充此结构,然后使用值.在下一次迭代中,我想在重新开始重用之前0或null之前重置所有字段.
我怎样才能做到这一点?我可以使用memset或者必须通过所有成员然后单独进行吗?
我似乎记得读过一些关于结构通过C#在CLR中实现接口有什么不好的东西,但我似乎无法找到任何关于它的东西.这不好吗?这样做会产生意想不到的后果吗?
public interface Foo { Bar GetBar(); }
public struct Fubar : Foo { public Bar GetBar() { return new Bar(); } }
Run Code Online (Sandbox Code Playgroud) 存储c结构的常用方法是NSArray什么?优点,缺点,内存处理?
值得注意的是,有什么之间的区别valueWithBytes和valueWithPointer -由Justin和鲶鱼下面提出.
这是 Apple valueWithBytes:objCType:对未来读者讨论的链接 ......
对于一些横向思考和更多关注性能,Evgen提出了STL::vector在C++中使用的问题.
(这引发了一个有趣的问题:是否有一个快速的c库,不是STL::vector很轻,但更轻,允许最小的"整理数组处理"......?)
那么原来的问题......
例如:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Run Code Online (Sandbox Code Playgroud)
那么:在一个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];
Run Code Online (Sandbox Code Playgroud)
BTW作为参考点,感谢Jarret Hardie,以下是如何存储CGPoints和类似的NSArray:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
Run Code Online (Sandbox Code Playgroud)
使用a std::tuple和仅数据之间有什么区别struct吗?
typedef std::tuple<int, double, bool> foo_t;
struct bar_t {
int id;
double value;
bool dirty;
}
Run Code Online (Sandbox Code Playgroud)
从我在网上找到的,我发现有两个主要的区别:struct更具可读性,而tuple有许多可以使用的通用功能.应该有任何显着的性能差异吗?此外,数据布局是否相互兼容(可互换转换)?
ARC禁止在结构或联合中使用Objective-C对象,尽管标记了文件-fno-objc-arc?为什么会这样?
我假设如果你标记它-fno-objc-arc你没有这个限制.
我定义了一个结构...
type Session struct {
playerId string
beehive string
timestamp time.Time
}
Run Code Online (Sandbox Code Playgroud)
有时我给它分配一个空会话(因为nil是不可能的)
session = Session{};
Run Code Online (Sandbox Code Playgroud)
然后我想检查,如果它是空的:
if session == Session{} {
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
显然这不起作用.我怎么写呢?
我理解不支持成员分配数组,因此以下方法不起作用:
int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // "error: invalid array assignment"
Run Code Online (Sandbox Code Playgroud)
我只是接受了这个事实,认为该语言的目的是提供一个开放式框架,并让用户决定如何实现诸如复制数组之类的东西.
但是,以下工作正常:
struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
Run Code Online (Sandbox Code Playgroud)
该数组num[3]是从其实例中成员分配struct1到其实例中的struct2.
为什么结构支持成员方式的数组,但一般情况下不支持?
编辑:Roger Pate 在结构中的线程std :: string中的注释- 复制/赋值问题?似乎指向答案的大致方向,但我不知道自己确认.
编辑2:许多出色的回应.我之所以选择Luther Blissett,是因为我对这种行为背后的哲学或历史原理很感兴趣,但James McNellis对相关规范文档的引用也很有用.