【发布时间】:2014-05-14 10:33:24
【问题描述】:
在 Google C++ 样式指南中,Namespaces 部分指出“在头文件中使用未命名的命名空间很容易导致违反 C++ 单一定义规则 (ODR)。”
我明白为什么不在实现文件中使用未命名的命名空间会导致 ODR 违规,但不知道在标头中使用如何做到这一点。这怎么会导致违规?
【问题讨论】:
-
他们的风格指南还包含其他“有趣”的建议,以避免右值引用、异常、lambdas、std::function/bind 以及可能只有他们知道原因的更多...
-
Google C++ 风格指南并不以特别有用或好的建议而闻名...
-
我同意你们俩的观点,但这不是我要问的。亲密的选民愿意提供理由吗?
-
他们提供的原因是这个问题“主要基于意见”。对于这种 type 的问题,这通常是正确的,但我强烈不同意亲密的选民。我不认为 this 问题是真的。您在问一些可以很客观地回答的问题,这从标题中很清楚。我认为这是一个很好的问题。
-
@PlasmaHH 今天很难想象有人尝试使用右值引用、lambda 或
std::function/bind编写可移植代码。 (不久前,模板也可以这样说;我不知道现在是否仍然如此,但我上次查看时,Mozilla 指南禁止它们,除非在少数知情的特权人士手中究竟如何解决各种编译器之间的差异——即使在今天,在 VS 和 g++ 中编写具有不同语义的模板代码也很容易。)
标签: c++ one-definition-rule unnamed-namespace