c++对一个定义规则的混淆
C++ confusion about one definition rule
我正在阅读一个定义规则。它说:
如果一个。cpp文件定义了struct S {int x;和另一个.cpp文件定义struct S {int y;,链接程序的行为它们放在一起是没有定义的。这通常用未命名来解决名称空间。
我不明白为什么&它是如何定义的?有人能解释一下这背后的真正原因吗?如何用未命名的名称空间解决这个问题?
就像它说的。您用不同的定义两次定义了同一个类S
。语言的创造者已经声明你不应该这样做。原因是允许这样做显然是荒谬的,并且会破坏翻译单元之间的兼容性。哪个定义是"正确的"?你的编译器应该使用哪个?
未命名的名称空间导致两个定义实际上定义了不同的类S
,它们被适当地命名为类似于my-anonymous-namespace-1::S
和my-anonymous-namespace-2::S
的东西,尽管您永远不能这样引用它们,因为名称空间是匿名的。
相关文章:
- 此代码是否违反一个定义规则
- 静态结构和一个定义规则
- 在类内定义的友元函数与类外定义的友元函数的查找规则之间的差异
- 这是定义一组递归规则的正确方法吗?
- 哪里定义了查找名称最直接声明的名称查找规则
- c++ 17 中结构自动定义构造函数的规则是什么?
- 为什么这不违反单一定义规则?
- C++关于模板等价/重新定义的规则
- 一个定义规则 - 编译
- 精神:不能在其规则定义中使用x3::skip(skipper)[一些递归规则]
- 了解 DCL60-CPP 中的不合规代码示例:遵守单一定义规则
- 声明规则定义了lvalue或prvalue
- 如何严格定义函数模板显式实例化规则
- 为什么传递给函数 set::itrator 而不是 const_iterator 违反了一个定义规则?
- 内联函数和一个定义规则
- 如何在C 中应用ODR(一个定义规则)
- 我们如何添加Coverity工具的自定义规则
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 精神 X3:本地定义的规则定义必须附加属性
- 为什么这不违反一个定义规则