[英]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
,尽管您永远无法引用它们之所以这样,是因为命名空间是匿名的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.