请问struct和class的效率差别大吗?

sigh02 2008-10-21 10:35:59
如果定义一个class
class CLS
{
int i;
}
这样,编译器会生成缺省的构造函数什么的,每new CLS一次就会调用构造函数。
如果定义一个struct
struct STRU
{
int i;
}
这样是不是就没有构造函数什么的开销呢?
因为这样的数据很多,如果有开销的话,差别还是很大的
...全文
1344 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2008-10-22
  • 打赏
  • 举报
回复
什么缺省构造函数?只要这样使用就没有什么构造函数:
struct A{
string str;
int p;
}p[2] = {{"uu",2},{"ii",3}};

class A{
public:
string str;
int p;
}p[2] = {{"uu",2},{"ii",3}};
yshuise 2008-10-22
  • 打赏
  • 举报
回复
template <class T>
template <struct T>//不行
sigh02 2008-10-22
  • 打赏
  • 举报
回复
如果new一个struct也要调用缺省构造函数的话,那效率是不是太低了?
还是编译器会作优化呢?
毕竟,缺省构造函数啥也没有
nickywang2004 2008-10-22
  • 打赏
  • 举报
回复
你可以试试
class A
{
private:
int a;
public:
A():a(10){}
};
struct B
{
int a;
};
int main() // 有问题
{
A a1;
B *b1=reinterpret_cast<B*>(&a1);
cout<<b1->a<<endl;
return 0;
}
chihz3800 2008-10-22
  • 打赏
  • 举报
回复
看情况,当需要控制成员访问权限时,用class,其他的时候用struct比较方便,至于效率,我觉着可忽略不计,构造函数是分配内存用的,而用完后析构函数会释放
chihz3800 2008-10-22
  • 打赏
  • 举报
回复
看情况,当需要控制成员访问权限时,用class,其他的时候用struct比较方便,至于效率,我觉着可忽略不计,构造函数是分配内存用的,而用完后析构函数会释放
chihz3800 2008-10-22
  • 打赏
  • 举报
回复
看情况,当需要控制成员访问权限时,用class,其他的时候用struct比较方便,至于效率,我觉着可忽略不计,构造函数是分配内存用的,而用完后析构函数会释放
LUCI-Z 2008-10-22
  • 打赏
  • 举报
回复
class 在第一个权限标示符出现之前定义的变量和函数权限默认为private的
struct 为public ,没有析构函数
其它没有区别
ddsxg 2008-10-22
  • 打赏
  • 举报
回复
class 在第一个权限标示符出现之前定义的变量和函数权限默认为private的
struct 相反
其它没有区别
sc_valentine21 2008-10-22
  • 打赏
  • 举报
回复
唯一的不同就是默认访问权限,Class是private,而struct则是public
yshuise 2008-10-22
  • 打赏
  • 举报
回复
把class当作c的struct方式使用时,没有构造函数,连默认的也没有。
fang235one_ 2008-10-22
  • 打赏
  • 举报
回复
没什么区别,因为class的(默认的)构造函数也只是给对象分配内存空间,并不做别的什么事情,当然也就不存在什么差别。
太乙 2008-10-21
  • 打赏
  • 举报
回复
ls说的很清楚了~我就不补充了~!jf~~
iambic 2008-10-21
  • 打赏
  • 举报
回复
效率上没区别。struct和class的最大区别在于可读性。

关于楼上提到的:
>(一)默认继承权限。如果不明确指定,
>来自class的继承按照private继承处理,
>来自struct的继承按照public继承处理;

这个所谓“来自class的”,指的应该是派生类为class的时候,而不是基类为class。不知道是写错了还是表达不清还是我理解不好。
chlaws 2008-10-21
  • 打赏
  • 举报
回复
问题内容:C++中struct与class的区别是什么?
原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=4238054
所属论坛:C++ 语言 审核组:C/C++
提问者:odesseydk 解决者:steedhorse
感谢:moany、Polarislee
关键字:
答案:
讨论一下结构(struct)与类(class)的区别,你认为结构(struct)有些什么作用,可以完全用类(class)取代么??
---------------------------------------------------------------

问的人太多,干脆整理个FAQ吧。
首先,讨论这个问题应该仅从语法上讨论,如果讨论不同人之间编程风格上的差异,那这个问题是没有答案的。毕竟不同的人偏好不同。

从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:
(一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;
(二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。
除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。

不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:
(1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;
(2)都可以有一大堆public/private/protected修饰符在里边;
(3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:A a = {1, 2, 3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。
(4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。
(5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。
(6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。
---------------------------------------------------------------

最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。
jackzhhuang 2008-10-21
  • 打赏
  • 举报
回复
就效率来说,两者一样
jieao111 2008-10-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyu637 的回复:]
其实是一样的


c++里面struct也是有默认的构造函数的。

struct和class的最大的区别是默认的访问权限不同,一个是public,一个是private,其他的很多都是一样的


除非你用的是c。
[/Quote]d
  • 打赏
  • 举报
回复
没啥大区别
das_jack 2008-10-21
  • 打赏
  • 举报
回复
这要看你的class编译时需不需要"有用的"构造函数,如果象你定义这样,属于POD,编译器不会合成构造函数的
wuyu637 2008-10-21
  • 打赏
  • 举报
回复
其实是一样的


c++里面struct也是有默认的构造函数的。

struct和class的最大的区别是默认的访问权限不同,一个是public,一个是private,其他的很多都是一样的


除非你用的是c。
加载更多回复(2)

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧