【发布时间】:2026-01-11 02:20:05
【问题描述】:
如果c++03中有有效代码,c++11中是否会因为引入了内部链接规则而中断?
Clause C.2.6 Clause 14: templates point 3 14.6.4.2
我想不出任何例子。
感谢任何帮助。
【问题讨论】:
-
C++ 向后兼容,所以它应该是 IMO 的有效代码
-
具有内部链接的模板实例化示例包括在未命名的命名空间中故意实例化的模板化函数(不是模板类的成员函数)。模板函数实例的内部链接永远不会隐式发生(即它们总是由程序员故意采取的行动产生的)。如果您有执行此操作的代码,那么与 C++03 相比,此规则可能会导致某些代码在 C++11 中的工作方式不同(将调用某些函数的不同重载)。但实际上,程序员很少有理由编写这样的代码。
-
@NutCracker 我明白了,但我看到“*.com/questions/23047198/…”和“*.com/questions/14595992/…”说代码由于内部链接而给出不同的输出。但它不是 c++03 中的有效代码,这就是为什么它不是有效的示例。
-
@Peter 我想不出前任。代码,因为在重载的情况下,肯定本地(内部链接)函数将具有更高的范围..那么我猜c ++ 03本身会出现错误或警告。
-
@NutCracker,有几个细节上的小角落案例,仅关注标准无法确保完全向后兼容性。但更重要的问题实际上是:编译器是否相应地向后兼容?对于现实世界的场景,这可能与非标准扩展使用的情况有关......