c++ namespace以及使用建议

命名空间就是用来区分你使用的这个变量和函数是属于那一块的。用来防止不同的人所写函数和变量,名字相同产生冲突。

在写c++代码的时候,经常会使用标准库中的函数,使用之前我们必须在前面添加一个std::,因为c++标准库的函数是在命名空间std下定义的。
std::cout << "命名空间" << std::endl;        // 比如输出数据,必须在前面加std::,否则编译器不认识

当然,有些人会使用using namespace来简化这个过程 

using namespace std;            // 告诉编译器,下面没有写命名空间的都默认使用std下的

cout << "命名空间" << endl;    

但是,不建议这样写,尤其是在全局或者头文件。
先来说原因:   如果你的程序中不止存在一个命名空间,而且这些命名空间中存在相同名字的函数或者变量,你去using会出现问题。


下面,我们自定义两个命名空间,然后对齐都进行using,内部包含一个同名函数,当我们去调用getAge()的时候会报错,因为,你同时using的两个命名空间中都有这个函数,编译器不知道用哪个,这就是不建议在全局的位置使用到using namespace

当然,将using namespace放到头文件中那更是不行的,因为头文件会到处包含,包含其的文件中可能也存在using namespace,这时候很容易出现下面的问题。

所以,一定不要将其放到头文件中

namespace Student {
	int getAge() {
	}
}

namespace Teacher {
	int getAge() {
	}
}

using namespace Student;
using namespace Teacher;

int main() {
	getAge();   // error
}

 

可以在比较小的一个范围内部使用using namespace,因为它只会作用在这个较小的作用域内部,是不会影响外界的。 

代码中这样写,相应的using namespace 就不会去影响别的位置的使用,其只会在对应作用域内部有效。

namespace Student {
	int getAge() {
	}
}

namespace Teacher {
	int getAge() {
	}
}


void func() {
	using namespace Teacher;

	getAge();
}

int main() {
	using namespace Student;
	getAge();
}

 

 using 还可以只指定namespace的一个函数或者变量,而且命名空间可以取别的名字

namespace Student {
	using namespace std;
	int getAge() {
	}

	string getName() {

	}
}

namespace Teacher {
	int getAge() {
	}
}


void func() {
	using namespace Teacher;
	namespace t = Teacher;            //给命名空间取别名

	t::getAge();  // 等价与Teacher::getAge()
}

int main() {
	using Student::getName;
	// getAge();  // error
	Student::getAge();
	getName();
}

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值