C ++:我什么时候应该使用结构而不是类,速度差异在哪里?

时间:2010-11-03 19:21:09

标签: c++ oop struct

  • 我应该何时使用struct代替课程?我目前正在使用从OpenGL纹理包装到位图字体的所有类。

  • 我使用的类就像struct(没有使用继承,多态等等)仍比struct慢吗?

5 个答案:

答案 0 :(得分:36)

您可能知道C ++中的结构和类 完全不同于它们的默认访问级别 (以及它们基础的默认可访问性:public为struct,private为class)。

一些开发人员,包括我自己喜欢使用POD-types的结构,即使用C风格的结构,没有虚函数,基数等。结构不应该有行为 - 它们只是数据的集合体成为一个对象。

但这自然是风格问题,显然两者都不慢。

答案 1 :(得分:14)

1)除了结构成员默认情况下,类是私有的,这两者之间没有真正的区别。

2)不完全一样。

编辑:请记住,您可以将虚拟继承与结构一起使用。它们完全相同:)

答案 2 :(得分:7)

在我加入其他问题之前,我会重复其他人所说的内容,而不是廉价和引用其他问题。

structclass在C ++中完全相同,唯一的例外是struct的默认访问权限为public,而class具有默认访问权限私人的。性能和语言功能支持完全相同。

但是,惯用法,struct主要用于“哑”类(普通旧数据)。 class更多地用于体现真正的阶级。

此外,我还将struct用于本地定义的函数对象,例如:

struct something
{
    something() : count(0) { }
    void operator()(int value) { std::cout << value << "-" << count++ << "\n"; }
    int count;
} doSomething;

std::vector<int> values;

...

std::foreach(values.begin(); values.end(); doSomething);

答案 3 :(得分:1)

正如其他人所解释的那样,除了默认访问级别外,它们是相同的。

可以认为类较慢的唯一原因是因为ArmenTsirunyan struct为POD类型class提到了一个好的样式(但不是唯一的样式)对于完善的对象类。后者通常包括继承和虚方法,因此vtable, 调用比直接函数稍慢。

答案 4 :(得分:1)

当我需要一个显式的析构函数时,我喜欢使用类。因为那样,你应该遵循三个规则,在这种情况下你需要编写一个复制构造函数和赋值重载器。有了这一切,使用类而不是结构似乎更自然。