ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++ using声明和using指示

2021-12-07 21:00:06  阅读:186  来源: 互联网

标签:std 头文件 作用域 指示 C++ blip using 声明


目录

using 声明

using声明(using declaration),一次引入命名空间的一个成员。通过using声明,我们可以清楚知道程序中使用的到底是哪个名字。using声明不允许同名成员,如果有,就不能使用using声明,可以用全名替代。
有效范围从using声明处开始,一直到using声明所在的作用域结束为止,超出有效范围就要使用全名,同时外层作用域的同名实体将被隐藏。
using声明语句可以出现在global作用域、local作用域、namespace作用域以及class作用域。其中,在class作用域,using声明只能指向基类成员(如using Base::size)。

形式:

using namespace_name::member_name

例如,如果不使用using声明,声明成员std::cout, std::endl,那么每次访问时,就要带上其命名空间(形如"std::"):

#include <iostream>

int main()
{
	std::cout << "hello, c++" << std::endl; // 没有using声明的成员,需要手动编写完整名字
	return 0;
}

如果使用了using声明,那么其作用域内,访问对应成员时,无需"std::":

#include <iostream>

using std::cout;
using std::endl;

int main()
{
	cout << "hello, c++" << endl; // 已经添加了using声明,作用域内,无需再编写完整名字
	return 0;
}

using 指示

using 指示(using directive)将namespace的所有成员提升到作用域可见。允许定义同名变量,如果要访问global成员,就要使用"::i"这样的符号。

namespace blip {
	int i = 16, j = 15, k = 23;
}

int j = 0;
int main()
{
	// using指示,blip中名字被“添加”到global作用域
	using namespace blip;

	++i;           // OK: blip::i 设为17
	++j;           // 二义性错误:是blip::j, 还是global j?
	++::j;         // OK: global j 设为1
	++blip::j;     // OK: blip::j设为16
	int k = 97;    // 当前局部k隐藏blip::k
	++k;           // OK: local k 设为98
	return 0;
}

头文件与using声明或者using指示

using声明和using指示会将名字注入到所有包含该头文件的文件中,而头文件应该只负责定义接口部分的名字,而不定义实现部分的名字。因此,通常情况下,头文件最多只在函数(local)作用域或namespace内使用using声明或指示。

注意: 在头文件中,尽量避免using指示,因为using指示会引入指定命名空间内所有成员名字,从而污染所有include该头文件的文件。

标签:std,头文件,作用域,指示,C++,blip,using,声明
来源: https://www.cnblogs.com/fortunely/p/15658804.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有