C++ 匿名namespace的作用以及它与static的区别
2015-04-28 17:06
1336 查看
假如我们有一个全局对象或者函数只希望它在一个tu中有效,又希望能够用它的地址来实例化一个模板,怎么办?只在一个tu中有效,可以选择internal linkage,但是要用它的地址做为模板参数,又要求它必须要是external linkage!!
很显然,匿名namespace不改变其内部标识符的linkage这一性质解决了这一难题,我们可以把这个全局对象或者函数放心的扔在一个匿名namespace中,然后用它的地址来实例化一个模板,绝对不会发生重定义错误:)
现在大部分C++书籍都认为匿名namespace和static是相同的,而正如这里所阐述的,它们之间差异是明显的:static修饰的标识符由于internal linkage的限制,是不能用来实例化模板的!
最后给出一个例子证实匿名namespace确实不改变linkage,呵呵
代码中验证了external linkage/internal linkage/no linkage三种情况
-------------------------------------------------------------------------------
?
-------------------
很显然,匿名namespace不改变其内部标识符的linkage这一性质解决了这一难题,我们可以把这个全局对象或者函数放心的扔在一个匿名namespace中,然后用它的地址来实例化一个模板,绝对不会发生重定义错误:)
现在大部分C++书籍都认为匿名namespace和static是相同的,而正如这里所阐述的,它们之间差异是明显的:static修饰的标识符由于internal linkage的限制,是不能用来实例化模板的!
最后给出一个例子证实匿名namespace确实不改变linkage,呵呵
代码中验证了external linkage/internal linkage/no linkage三种情况
-------------------------------------------------------------------------------
?
相关文章推荐
- C++ 匿名namespace的作用以及与static的区别
- 转:C++ 匿名namespace的作用以及它与static的区别
- C++ 匿名namespace的作用以及它与static的区别
- C++ 匿名namespace的作用以及它与static的区别
- C++ 匿名namespace的作用以及它与static的区别
- C++ 匿名namespace的作用以及它与static的区别
- anonymous namespace 匿名namespace的作用以及它与static的区别
- anonymous namespace 匿名namespace的作用以及它与static的区别
- c++ static的作用,以及static对象在类和函数中区别
- static 常量区 数据区 堆栈 生命周期 作用域 c++ 以及脚本语言的区别
- C++中内联函数的作用以及与宏代码的区别
- static的含义以及其在C/C++中的区别
- 匿名 Namespace和static 的区别
- c++中,static,和const,以及引用类型的作用
- static关键字的作用以及静态成员函数与非静态成员函数的区别
- c++ static的作用,以及static对象在类和函数中区别
- [面试] static的含义以及其在C/C++中的区别
- C++小知识:iostream和iostream.h的区别以及namespace小解
- C++ 栈和堆的区别和作用,以及内存分配
- C++中string和string.h以及cstring,CString的作用和区别