C++中当未命名空间跟全局变量在一起的时候,怎么调用未命名空间里的变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中当未命名空间跟全局变量在一起的时候,怎么调用未命名空间里的变量相关的知识,希望对你有一定的参考价值。
C++ primer里的一道程序
int i;
namespace
int i;
如调用全局变量,可以用::i,但是如果想调用未命名空间里的,应该怎么调用?
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
int i = 10;
namespace mm
int i = 5;
int main()
cout<<mm::i<<endl;
cout<<i<<endl;
return OK;
本回答被提问者采纳 参考技术B 全局变量,就是"::变量名" 参考技术C 不知道
把分给我吧,大哥,好歹打了了么多
我差分提问题O(∩_∩)O哈哈~谢谢了 参考技术D c语言中文件作用域的全局变量表示方式:
static int i = 0;
c++中进行了扩展, 提供了对应的c++方式, 匿名命名空间:
namespace
int i = 1;
所以
static int i = 0;
int main() return 0;
和
namespace int i = 0;
int main() return 0;
完全等效, 都是直接::i来调用
这里的i都只能在那个唯一的cpp文件中能够访问, 是文件作用域的全局变量
这一点我记得c++ primer第三版应该提过, 请好好翻一下书或者找对应资料
因为等价于static, 所以下面的代码编译不通过:
int i = 1;
namespace
int i = 2;
int main()
cout << i << endl;
test.cpp
e:\工程\test\test\test.cpp(13) : error C2872: “i”: 不明确的符号
可能是“e:\工程\test\test\test.cpp(6) : int i”
或“e:\工程\test\test\test.cpp(8) : int `anonymous-namespace'::i”
自调函数的写法:
优势:隐式函数(自调函数)里面的参数不会与其它框架的全局变量冲突。
js中常常定义一个函数用做临时的命名空间,在这个命名空间内定义的变量都不会污染到全局命名空间(防止局部变量与全局变量冲突)
普通写法:
function mymodule(){
//模块代码
}
mymodule();
匿名自调函数:
(function(){
//模块代码
}( )); //结束函数定义并立即调用它
或者:
(function(){
})();
(function(){}()) 外面一个括号的 是直接获取返回值
里面计算一次
(functuon(){})() 外面2个括号并排的
是先计算前面括号的值 然后执行这个返回值 当然返回的肯定要是函数
前面是包在一起
整体性要好一些
以上是关于C++中当未命名空间跟全局变量在一起的时候,怎么调用未命名空间里的变量的主要内容,如果未能解决你的问题,请参考以下文章
C++ 从 std::async 函数读取命名空间中的全局变量标志