假设我有一个库声明了一个返回 const
类型的函数:
class Foo { ... };
const Foo makeFoo();
现在我想从 makeFoo()
返回类型中删除 const
(参见我的 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++。
最佳答案
以下guidelines关于影响 ABI 的因素表明答案是肯定的,它确实破坏了 ABI 兼容性:
You cannot
...
For existing functions of any type:
- changing the return type in any way
由于您正在将返回类型从 const Foo
更改为 Foo
我会说这是犯规的。
关于c++ - 从函数返回类型中删除 const 是否会破坏 ABI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37547651/