类中的方法声明的顺序是否与编译器有关?

时间:2016-01-25 14:57:10

标签: c++

我在C ++项目中使用第三方静态库(.lib文件)。静态库的作者为我添加了一个类的方法,并向我发送了库的更新版本。

不幸的是,他没有发送新的头文件并且与他的通信速度很慢,所以我很快就不会得到新的标题。我知道新方法的方法签名,所以我可以将它添加到头文件中。

我的问题是,在公共方法列表中我添加新声明(顶部,底部,中间......)是否重要。我最好的猜测是它 并且头文件中的顺序决定了编译类中的顺序。有人可以确认或反驳这个吗?

3 个答案:

答案 0 :(得分:13)

  

我的问题是,在公共方法列表中我添加新声明的位置是否重要

AFAIK,成员函数是否是常规函数并不重要,但如果它是virtual成员函数则很重要。虚拟表中的虚拟成员函数按特定顺序排列。如果图书馆的版本与.h文件的顺序不同,那么您很可能最终会调用错误的函数。

相关:Force the order of functions in the virtual method table?

答案 1 :(得分:1)

如果方法声明不使用类中声明的类型(例如返回类型),则声明方法的位置不重要。

否则,如果方法声明依赖于类中其他类型的声明,则可能发生错误。

例如,编译器将为此类定义发出错误

assert(&input != &output)

因为类型struct A { B f(); struct B {}; //... }; 在结构声明本身之前的成员函数声明struct B中使用。

答案 2 :(得分:0)

类中的方法声明对编译器来说不重要,除非它依赖于尚未完成的变量声明。