![]() |
1
166
(以下为
未命名的命名空间是一个用于生成标识符的实用程序
使用空主体的额外步骤很重要,因此您可以在命名空间主体内引用类似的标识符
这意味着您可以调用自由函数(例如)
两个
模板参数必须具有外部链接,因此在这种情况下,必须将标识符放入匿名命名空间。 阅读Comeau计算公司的优秀文章 Why is an unnamed namespace used instead of static? ( Archive.org mirror ) |
![]() |
2
57
在匿名名称空间中拥有某些内容意味着它是本地的 translation unit (.cpp文件及其所有包含项)这意味着如果在其他地方定义了具有相同名称的其他符号,则不会违反 One Definition Rule (ODR)。
这与使用静态全局变量或静态函数的C方法相同,但也可以用于类定义(应该使用而不是
同一文件中的所有匿名命名空间都被视为同一命名空间,不同文件中的所有匿名命名空间都是不同的。匿名命名空间等效于:
|
![]() |
3
12
示例显示,您加入的项目中的人员不了解匿名命名空间:)
这些不需要在匿名命名空间中,因为
这实际上是一种悲观情绪:
在这里。我掉进了同一个陷阱(标准中的措辞表明文件静力学在某种程度上被贬低为匿名的命名空间),但是在像KDE这样的大型C++项目中,你会得到很多人再次正确地改变你的方向: |
![]() |
4
12
除了这个问题的其他答案外,使用匿名名称空间还可以提高性能。由于名称空间中的符号不需要任何外部链接,编译器可以更自由地对名称空间中的代码执行积极的优化。例如,一个循环中多次调用的函数可以被内联,而不会对代码大小产生任何影响。 例如,在我的系统上,如果使用匿名命名空间,以下代码将占用大约70%的运行时间(x86-64 gcc-4.6.3和-o2;请注意,add-val中的额外代码使编译器不希望将其包括两次)。
|
![]() |
5
9
匿名名称空间使封闭的变量、函数、类等仅在该文件中可用。在您的示例中,这是一种避免全局变量的方法。没有运行时或编译时性能差异。 除了“我希望这个变量、函数、类等是公共的还是私有的?”之外,没有什么优势或劣势。 |
![]() |
6
6
未命名的命名空间将类、变量、函数和对象的访问权限限制在定义它的文件中。未命名的命名空间功能类似于
但是,
但对于未命名的命名空间也可以这样。 例如,
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 4 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |