gpt4 book ai didi

c++ - 类型模板参数中的 ODR 和 "same sequence of tokens"和 "typename"与 "class"

转载 作者:行者123 更新时间:2023-12-05 01:22:33 24 4
gpt4 key购买 nike

  • [免责声明 #1:我实际上并不是指 C++ 标准;我指的是 cppreference"Definitions and ODR (One Definition Rule)" .]
  • [免责声明 #2:我实际上懒得尝试,我通过引用标准 C++ 免责声明来捍卫这一点,即不需要诊断 ODR 违规,所以我可能不会学到任何东西尝试一下。]

C++ 标准(如上面#1 中所否认的那样)表示, 违反 ODR 的要求之一是“每个定义都包含相同的标记序列”。

这看起来很清楚,除了,我很好奇:

在声明模板的类型模板参数时,是否也不允许在两个不同的定义(在两个不同的翻译单元等)中用 typename 替换 class

因为这些关键字通常可以互换。

(我知道在任何情况下都不能用 typename 代替 class in a template template parameter 的特殊情况。)

最佳答案

typenameclass 不是同一个标记。所以是的,如果同一实体的两个定义在这一点上不同,那么它就是 ODR 违规行为。

ODR 规则的编写期望模板/内联定义仅在头文件中写出一次,然后包含在其他文件中,这样就不会发生这种变化。

关于c++ - 类型模板参数中的 ODR 和 "same sequence of tokens"和 "typename"与 "class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73748494/

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