虚拟方法优化

时间:2016-05-08 00:24:10

标签: c++ optimization virtual

假设我有这样一个类:

class MyClass{
    int somedata;
  public:
    virtual void DoSomething() { /*do something here*/}
};

然后我永远不会从这个课程中获得。我意识到如果编译器只是按照编写代码的方式编写程序集,那么每个MyClass实例都会因虚函数而增加数据大小......

标准符合优化器优化类如下:

class MyClass{
    int somedata;
  public:
    void DoSomething() { /*do something here*/}  //Note absence of virtual
};

如果它是标准的符合优化,那么任何编译器都会这样做吗?

2 个答案:

答案 0 :(得分:4)

符合编译器和链接器的标准可以做任何他们想要的事情,只要它对代码的预期行为没有影响,例如你引用的例子。

我清楚地回忆起浏览最近的gcc发行说明,特别提到的是,与链接器合作,确实如此。

答案 1 :(得分:-1)

您应该使用C ++ 11标准中引入的final关键字。

Class My class {

Public:
Void doSomething () final;
}