虚拟方法优化

Virtual methods Optimization

假设我有一个像这样的 class:

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

然后我再也没有从这个 class 中得出结论。我意识到,如果编译器完全按照代码编写的方式编写程序集,那么每个 MyClass 实例都会因为虚函数而增加数据大小......

优化器优化 class 这样的东西是否符合标准:

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

如果是符合标准的优化,有编译器会这样做吗?

只要不影响代码的预期行为(例如您引用的示例),编译器和链接器就可以随心所欲地执行任何操作,这是符合标准的。

我清楚地记得浏览最近的 gcc 发行说明时特别提到,在与链接器的合作下,它确实做到了这一点。

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

Class My class {

Public:
Void doSomething () final;
}