宁静.Blowind

重归?

今天研究的问题是命名空间和匿名命名空间。
p.s.借这个机会也过了把在Stack Overflow上提问的瘾,想来我是第一次和外国人交流问题^_^

以下代码几乎包括了今天研究的所有内容:
1.匿名命名空间
2.命名空间嵌套
3.命名空间中可以有函数定义
4.命名空间作用域的研究
5.命名空间的访问方式
6.全局命名空间和匿名命名空间


#include

namespace
{
int a=6; //A
int f(void) //B
{
return 0;
}
namespace k //C
{
int a;
}
}

int a=2; //D

int main(void)
{
using std::cout;
using std::endl;
int a=1; //E1
{//block
int a=3; //F
k::a=4; //G
cout<<"namespace k::a="<<::k::a<
cout<<"a in block="<<
cout<<"global a="<<::a<
}
cout<<"a in main="<
<
return 0;
}

1.A处是匿名namespace中定义的a,很遗憾的是这个值没有任何方法可以访问,因为D处已经定义了全局变量a(详细见下)
2.C处测试了命名空间的嵌套,而G和H处使用了两种不同的访问方式来访问属于这个命名空间的a.
3.B处表明命名空间内允许有函数的定义。
4.从E1到E2开始的一大段说明了作用域的问题:
H处的a属于匿名命名空间中的k命名空间,可以有::k::a和k::a两种访问方式,不过个人认为k::a的访问方式应该更受认可。
在代码块中允许定义覆盖,也就是说在代码块block中,a被重新定义了,这时候main函数的a被暂时隐藏.
5.命名空间的访问方式同类的成员解析符”::”,如果”::”前不加任何东西,那么表示全局命名空间(下详)
6.匿名命名空间不需要解析符,由于其匿名而无法被其他代码文件中的函数使用,C++标准中鼓励用命名空间的方式代替static关键字,如下:

the new C++ Standard reads in section 7.3.1.1 Unnamed Spaces, paragraph 2:

“The use of the static keyword is deprecated when declaring objects in a
namespace scope, the unnamed namespace provides a superior alternative.”

在没弄明白全局命名空间和匿名命名空间前,我对以下代码挺疑惑:

#include

namespace
{
int a=1;
}

int a=2,b=3;

int main(void)
{
std::cout<<::a<<::b;
return 0;
}

当我尝试使用a时,编译失败,给出了两个候选变量:匿名空间中的a和全局的a
当我使用::a时,我一直期待结果会是13,但是以上程序的输出是23.
然后去Stack Overflow上问了这个问题,终于搞明白点了。
::a是访问全局命名空间的方式,而访问匿名命名空间的方式是使用a,
如果说全局变量中没有叫a的变量存在,才会去找匿名空间中的a,也就解释了为什么当没有全局a的时候,::a和a都表示匿名空间中的a

也就是说,当匿名空间和全局空间都存在时,对于::访问而言,全局空间优先,
不过不建议大家做这种鸟实验,毕竟没有人会故意在匿名空间和全局空间放相同名字的变量。
此外,对于a来说,如果以上定义同时存在,会引发语法错误(二义性)。

另外还有几点:
1.namespace并非一声明成员就固定,可以增加成员。


namespace sp
{
int k;
}
namespace sp
{
int l;
}

此时sp中k和l都是存在的

2.namespace引用有传递性:

namespace sp
{
using namespace std;
}

如果使用了引用了sp,那么std也同时包括进来了(命名空间中允许using声明和using引用)

以上。

C++的学习笔记,今天一个中午解决了很多问题,特发此文,表达一些我对C++的理解。
主要内容:copy constructor,以及类与基本数据类型的理解。
继续阅读

總之,今天有幸連接上了一個速度不錯的無線網絡,可以更新更新這裡了.
继续阅读

這個假期還算充實的,後天一早我就該走了,這意味著這裡或許又要荒廢一段時間了.
給自己定下計畫書,大學應該要過得充實有意義才對.
1.首先是因為自己帶了筆記本,想必很多人都帶本了,遊戲在所難免,這學期必須改變策略,爭取都在教室自習,宿舍一旦有了筆記本我相信就不可能是個能專心學習的地方了
2.在RHCT那邊,我爭取早些考過,多多研究,多多探索,相信將來會有好處
3.數學建模是否要去參加的問題目前我還沒考慮清楚,很大程度上取決於下學期的課程量,我會在一兩周以後做最後決定.
4.課外學習的話:最優先的是Python和Shell腳本的學習,連帶Shell腳本再學習學習awk,以上除了awk以外都是主線任務
分支任務:練習五筆打字,Blues口琴,有條件的話要開始學習網絡相關的知識
5.英語在這個月內把常見的單詞都背好,準備多看英文電影,多看英語閱讀,爭取拿下四級,省得浪費時間在毫無意義的英語課堂.(極其重要的任務!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
6.以上任務寫給自己,覺得不多,但是回顧這個假期,我也做不了多少當初定下的計畫,急功近利會導致學習的不穩固,一切靠自覺,希望我能時常想起自己的這篇日誌.

前段时间下了好些grub背景,觉得每个都不错,于是有了背景轮流换的想法,今天查了下shell编程相关的書,算是粗略完成任务了^_^
继续阅读

由於昨天本本硬盤出現了壞道,於是拿出去修,倒是借此機會成功地完成了整個系統的備份和還原工作,慶祝一下~
继续阅读

据说通过手动编译内核,可以达到很不错的效果,但是本人至今编译过两次内核,第一次编译的内核比系统自带内核还大,没有办法打开chrome,第二次编译的内核仅用了不到50分钟,内核大小也比系统自带的小了很多,不过似乎速度不升反降…>_<
无论怎么说,编译内核的步骤是不会变的,在这里我就将个人编译内核的步骤分享出来,供以后查看.
继续阅读

xfce下其实拥有比gnome更加灵活的全局快捷键设置,由于xfce安装完后,很多键都是没有设置的,所以造成了xfce似乎没有gnome功能强大的假象>_<

继续阅读

我的本本用的显卡是G105M的,恩入门级显卡,256M显存够用,只是跑三国无双5比较吃力,剩下的都还好.

废话不多说,下面是步骤:

继续阅读

看来是很久没来过了,这里依旧没有变,变的只是Blog的主人,大学半年,我了解了很多,许多问题并没有我想象的简单,但是努力了,收获了,我也就知足了.

我不是一个勤劳的人,我也不承诺我何时会再更新我的Blog,只是当我灵光一闪的时候,我希望我能再度光临这个荒废已久的空间,看看曾经的自己,曾经可爱的梦.

不想说太多,很久没写些什么东西了,反复想了半天,不管怎么起笔,自己都觉得可笑.

总结总结大学:

首先是学业:因为有些功底,学起来还是比别人轻松的,报名去了RHCT培训,继续我的linux旅途,这次,我要全面跨入linux类系统中。

然后是人际:我还是和以前一样吧,只是没有那么计较了,开心的时候更多一些,这半年的经验告诉我,很多年多事情”认真你就輸了”

我知道有人会问我某某的问题,涉及到保密问题我不能透露太多.总之现在是非常好的朋友,但或许不是适合在一起的人,感情方面一切随缘吧.

我不求太多,我觉得我是个快乐的光棍,我知足咯~ ^_^

以上

By Javran Wayik 23:00 Feb 23,2010