我应该何时使用struct
代替课程?我目前正在使用从OpenGL纹理包装到位图字体的所有类。
我使用的类就像struct
(没有使用继承,多态等等)仍比struct
慢吗?
答案 0 :(得分:36)
您可能知道C ++中的结构和类 完全不同于它们的默认访问级别 (以及它们基础的默认可访问性:public为struct,private为class)。
一些开发人员,包括我自己喜欢使用POD-types的结构,即使用C风格的结构,没有虚函数,基数等。结构不应该有行为 - 它们只是数据的集合体成为一个对象。
但这自然是风格问题,显然两者都不慢。
答案 1 :(得分:14)
1)除了结构成员默认情况下,类是私有的,这两者之间没有真正的区别。
2)不完全一样。
编辑:请记住,您可以将虚拟继承与结构一起使用。它们完全相同:)
答案 2 :(得分:7)
在我加入其他问题之前,我会重复其他人所说的内容,而不是廉价和引用其他问题。
struct
和class
在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)
当我需要一个显式的析构函数时,我喜欢使用类。因为那样,你应该遵循三个规则,在这种情况下你需要编写一个复制构造函数和赋值重载器。有了这一切,使用类而不是结构似乎更自然。