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

Mar*_* P. 22 c++ oop struct

  • 我什么时候应该使用一个struct而不是一个类?我目前正在使用从OpenGL纹理包装到位图字体的所有类.

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

Arm*_*yan 36

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

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

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

  • 为了澄清:"POD类型"表示"普通旧数据",并且指的是在性能方面与C结构基本相同的结构或类.有关详细信息,请参见http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html.正如Armen所说,你可以将POD类型声明为类或结构,而没有任何性能差异; 这只是风格. (6认同)
  • @sbi:有趣的是,我确实考虑过写一些语法上的"差异",但认为它会过于迂腐...你永远不知道它会引起什么反应:)) (2认同)

Goz*_*Goz 14

1)除了结构成员默认情况下,类是私有的公共事实之外,2之间没有真正的区别.

2)不完全一样.

编辑:请记住,您可以使用结构的虚拟继承.他们是相同的:)


Mer*_*ham 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);
Run Code Online (Sandbox Code Playgroud)