繁体   English   中英

C ++对一个定义规则的困惑

[英]C++ confusion about one definition rule

我正在阅读一个定义规则 它说:

如果一个.cpp文件定义了struct S {int x; }; 另一个.cpp文件定义了struct S {int y; }; ,将它们链接在一起的程序的行为是不确定的。 通常使用未命名的名称空间来解决。

我不明白为什么以及如何定义它? 有人能解释一下这背后的真正原因吗? 如何使用未命名的名称空间解决它?

就像它说的那样。 您用不同的定义两次定义了相同的类S 语言的创造者宣布您不应这样做 原因是,允许这样做显然是无稽之谈,并会破坏整个翻译部门的兼容性。 “正确”的定义是哪个? 您的编译器应使用哪个?

未命名的命名空间导致两个定义实际上定义了不同的S ,这些类被正确命名为类似于my-anonymous-namespace-1::Smy-anonymous-namespace-2::S ,尽管您永远无法引用它们之所以这样,是因为命名空间是匿名的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM