gpt4 book ai didi

c++ - 使用不同优化级别编译的不同翻译单元中的模板实例化

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:47:21 25 4
gpt4 key购买 nike

假设我有两个翻译单元,都使用std::string。我用 -O3 编译其中一个,另一个没有优化,然后将结果链接在一起。两个目标文件都包含实例化的 std::string,但我希望一个版本编译时进行优化,而另一个则不编译。链接器会在链接期间只选择其中一个吗?如果有,是哪一个?生成的可执行文件能否保证始终正常运行?

更新:由于这看起来是特定于实现的,因此将其缩小到 gcc 和 clang 行为是有意义的,因为它们都实现了定义明确且具体的 Itanium ABI,而不是试图从C++ 标准本身的 View 。

最佳答案

就 C++ 标准而言,这可能是最左边领域的出路。对于初学者来说,C++ 标准与“优化级别”或任何其他内容无关。

因此,这完全属于“实现定义”的范围。答案取决于确切的编译器/链接器和您使用的编译器/链接器版本。一个编译器或链接器的正确答案将仅适用于该编译器或链接器。不同的编译器,甚至是同一编译器的不同版本,都可能产生不同的结果。

我希望得到以下两种结果之一:

A) 链接器会提示合并不相同的片段,或者

B) 将随机选择一个或另一个。可能是传递给链接器的第一个或最后一个翻译单元。

因此,总而言之,要知道这个问题的答案,唯一的方法就是让您尝试使用您正在使用的任何编译器或链接器,并检查结果。

关于c++ - 使用不同优化级别编译的不同翻译单元中的模板实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35978369/

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