gpt4 book ai didi

c++ - 为什么不为 C++17 放弃单一定义规则?

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

引用 C++ 草案 N4713:

Every program shall contain exactly one definition of every non-inline function or variable that is odr-used in that program outside of a discarded statement (9.4.1); no diagnostic required. The definition can appear explicitly in the program, it can be found in the standard or a user-defined library, or (when appropriate) it is implicitly defined (see 15.1, 15.4 and 15.8). An inline function or variable shall be defined in every translation unit in which it is odr-used outside of a discarded statement.

在 C++17 之前的 C++ 版本中,我可以通过声明我的函数 inline 来绕过这个限制。 C++17 为变量添加了相同的特性。

此外,在我看来,inline-关键字除了可以忽略 ODR 之外没有其他用途。

那么,为什么不为 C++17 放弃整个规则呢?我看不出可以关闭的规则的用途。

最佳答案

使用inline“关闭”ODR 并不是免费的:inline 实体的定义必须出现在每个翻译单元中。请注意,这意味着对其定义的任何更改都会导致重新编译使用它的每个编译单元。当该函数是许多/大型项目所依赖的某些库的一部分时,这将特别令人不快。

inline 函数,另一方面,仅存在于一个编译单元中,并在其他地方需要时通过链接器通过某些符号进行引用。遵守 ODR 保证符号没有歧义。

关于c++ - 为什么不为 C++17 放弃单一定义规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54594324/

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