我在C ++项目中使用第三方静态库(.lib文件)。静态库的作者为我添加了一个类的方法,并向我发送了库的更新版本。
不幸的是,他没有发送新的头文件并且与他的通信速度很慢,所以我很快就不会得到新的标题。我知道新方法的方法签名,所以我可以将它添加到头文件中。
我的问题是,在公共方法列表中我添加新声明(顶部,底部,中间......)是否重要。我最好的猜测是它 并且头文件中的顺序决定了编译类中的顺序。有人可以确认或反驳这个吗?
答案 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)
类中的方法声明对编译器来说不重要,除非它依赖于尚未完成的变量声明。