c++学习笔记(2)

来源:互联网 发布:知乎日报 吐槽精选 编辑:程序博客网 时间:2024/05/01 14:53

</pre>c++学习笔记(2)<p></p><p>关于namespace</p><p>解决<span style="font-family:verdana,arial,sans-serif; font-size:13px; line-height:18.2px">在同一个范围内引入了像个相同的标识的问题,如果不加区分,那么编译器将无法分辨引用的到底是哪一个,导致程序出错<span style="font-family:verdana,arial,sans-serif; font-size:13px; line-height:18.2px">naming collision</span></span></p><p><span style="font-family:verdana,arial,sans-serif; font-size:13px; line-height:18.2px"><span style="font-family:verdana,arial,sans-serif; font-size:13px; line-height:18.2px">namespace的作用范围同变量的作用域规则相同,在函数外部定义的那么就是作用范围就是从定义开始到本代码块执行完毕,使用namespace主要为了避免标识冲突那么尽量不要使用自定义的namespace作为全局范围或者将该namespace放到头文件的header中,避免成为一个全局的范围。</span></span></p><p><span style="font-family:verdana,arial,sans-serif; font-size:13px; line-height:18.2px"><span style="font-family:verdana,arial,sans-serif; font-size:13px; line-height:18.2px"></span></span></p><p><span style="font-family:verdana,arial,sans-serif; font-size:13px; line-height:18.2px"><span style="font-family:verdana,arial,sans-serif; font-size:13px; line-height:18.2px">namespace 定义命名空间</span></span></p><p></p><pre name="code" class="cpp">namespace    id{}

那么在此花括号中的所有内容都是存在这个命名空间中可以使用

id::id2

双冒号运算符(scope resolution operator)在c++中标识域运算,也就是在namespace中使用

在定义号命名空间后在函数中使用可以使用using关键字,比如上例中

using namespace id
后此之后的代码中出现标识后将在namespace id空间中查找,同一代码块可以使用多次using namespace,多次使用using之后的代码会在这几个引用的命名空间中查找特定的标识,那么在这几个using之后的表达式所在的命名空间就是这几个namespace 的并集,但是这样使用的同时,大大增加了命名冲突的可能性,比如以下代码:

my_1.h

namespace  my_1{int doSomething(int x,int y){<span style="white-space:pre"></span>return x-y;}}

my_2.h

namespace my_2{int doSomething(int x,int y){      return x+y;}}


主程序


int main()

using namespace std;

using namespace my_1; 

using namespace my_2; 

cout << doSomthing(6,5) << endl;

}

在此主程序下,使用了两个自定义的命名空间,并且这两个命名空间存在相同的标识,那么在连续使用using将my_1和my_2命名空间包含进来之后,程序在编译时就不知道这个doSomething是属于谁的,也就导致编译出错

相同的命名空间可以在程序中多次出现并且包含不同的标识,相当于是分散定义,但是同属一个命名空间,多个命名相同的话,在整个程序中相当于是并集,所属在不同位置的相同命名空间其实就是一个命名空间




0 0
原创粉丝点击