gpt4 book ai didi

c++ - 从函数返回类型中删除 const 是否会破坏 ABI?

转载 作者:可可西里 更新时间:2023-11-01 18:39:28 25 4
gpt4 key购买 nike

假设我有一个库声明了一个返回 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 thereturn type in any way

由于您正在将返回类型从 const Foo 更改为 Foo 我会说这是犯规的。

关于c++ - 从函数返回类型中删除 const 是否会破坏 ABI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37547651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com