假设我有一个库,声明一个函数返回const
类型:
class Foo { ... };
const Foo makeFoo();
现在我要从const
返回类型中删除makeFoo()
(请参阅我的previous question)。我可以从头文件和cpp文件中删除const
,重建库,并将我的代码链接到新库。但是,我还有动态链接到此库的旧代码,我希望它继续使用新版本的库。
那么,第一个问题是,从返回类型中删除const
是否打破了ABI?
第二个问题,实际的代码是完全不同的:它是一个模板类,它有一个静态成员函数,后来被显式实例化:
// fooMaker.h
template<class Foo>
class FooMaker {
public:
static const Foo make();
};
// fooMaker.cpp
template<class Foo>
const Foo FooMaker<Foo>::make() { ... }
template class FooMaker<Foo1>;
template class FooMaker<Foo2>;
它改变了什么吗?
如果这很重要,我在linux下使用g ++。
答案 0 :(得分:1)
关于影响ABI的以下guidelines表明答案是肯定的,它确实打破了ABI兼容性:
你不能
...
对于任何类型的现有功能:
- 改变了 以任何方式返回类型
由于您要将返回类型从const Foo
更改为Foo
,我会说这会犯规。