4 c++ performance constructor struct class
C++:由于struct是一个包含所有"public"的类,是否创建并调用了default -ctors?
我要问的原因是当使用结构时,理解C++可能具有的开销(如果有的话).我听到的一个观点是,在C++中,类有一些结构没有结构的开销,但我对此提出质疑.
Rod*_*ddy 15
在C++中没有区别,除了struct member的默认visibilty是public,而class members默认为private.
在性能方面,结构构造将与类构造一样快.实际速度当然取决于结构包含的内容.如果要将C结构移动到C++,那么结构将只包含POD类型(普通旧数据 - 没有类),它们无论如何都没有构造函数.
Ste*_*sop 13
在类完全相同的情况下,结构体确实有一个默认的构造函数.
顺便说一句,结构不是"一个公开的一类".它是一个以public作为默认访问说明符的类.结构可以有私有成员,但是如果他们这样做,你的代码审查者可能会打你.
相关问题不是结构与类,它是POD与非POD.
还记得一个类的"int"成员是如何未初始化的,除非你在初始化列表中给它一个值或在构造函数中设置一个值?嗯,这同样适用于所有POD类型.POD结构(或POD类)的默认构造函数无关.因此,虽然名义上存在,但编译器实际上不应该生成并调用它.
这意味着您可以在C中定义的任何类型的默认构造函数在C++中使用时不应引入运行时开销.在实践中,我听到有传言说并非所有的C++编译器都应用足够的优化来确保所有代码总是发送二进制文件,就像编译为C时那样.但我不知道这是否是导致问题的原因之一问题 - 我猜它通常是相同的.
所以,给定一个POD结构:
struct sPOD {
int foo;
float bar;
char baz[23];
};
Run Code Online (Sandbox Code Playgroud)
以下内容可能不会在C++中发出任何代码(除了可能移动堆栈指针,这取决于编译器将自动变量放在一起的程度),就像在C中一样:
sPOD s1;
Run Code Online (Sandbox Code Playgroud)
事实上,它不适合我在gcc上.