gpt4 book ai didi

c++ - XCode4 中的 "inline Methods Hidden"选项。

转载 作者:行者123 更新时间:2023-11-30 04:31:03 25 4
gpt4 key购买 nike

查看文档信息:隐藏的内联方法GCC_INLINES_ARE_PRIVATE_EXTERN = 是启用后,内联方法的外联拷贝被声明为“私有(private)外部”。[GCC_INLINES_ARE_PRIVATE_EXTERN, -fvisibility-inlines-hidden

有谁知道它会如何影响 underging C++ 库?我的 iphone 项目基于 C++ 库,使用 google protobuf,我发现一些奇怪的问题,库内联函数不会被“隐藏内联方法”选项设置为 YES,实际上它是系统默认值,设置为 NO 它有效好吧,我不知道为什么?里面有什么 secret ?

有对此话题感兴趣的 friend 请分享讨论,先谢谢了。

最佳答案

secret 是一个定义规则。如果内联是隐藏的,那么您最终可能会得到每张图像内联的多个(私有(private))拷贝。

理想情况下,您将配置和使用所有内容,以便它能够使用单一定义规则运行,然后您可以启用私有(private)外部作为优化(这可能不是在所有方面都很好,尤其是二进制大小)。您会喜欢这种方法,因为它遵循标准的模型。

快速回顾 ODR:

// somewhere.hpp
namespace MON {
inline int cas(const int*,const int*,int*) {
return dah_dum();
}}

// elsewhere.hpp
namespace MON {
inline int cas(const int*,const int*,int*) {
return dum_dah();
}}

任何 int MON::cas(const int*,const int*,int*) 引用,它不是完全或部分内联的,而是对 int MON::cas 的函数调用(const int*,const int*,int*) 可能会导致使用任一定义,而不管哪个定义对 TU 可见。链接器仅保留一个定义,并且假设所有定义都相等。这很重要,因为如果每个被引用和可见的定义都会为每个翻译生成一个拷贝

如果它在使用 ODR 规则时“有效”,那么很可能您的目标文件中有一个给定符号的多个定义,并且由于编译器设置,您最终会引用不同的定义。如果您已经声明了一个非静态的或在匿名命名空间中的内联,则所有源文件中的定义应该相同。

如果您将其与 C TU 混合使用,那么...它具有不同的链接规则,这只会​​使问题进一步复杂化。

关于c++ - XCode4 中的 "inline Methods Hidden"选项。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8380736/

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