C++ - using关键字

1. 一些必须要知道的常识

  • using可以用来引入命名空间,如:
using namespace std;
  • using可以用来给变量取别名,类似于typedef,如:
using usingInt = int;
typedef int typedefInt
  • using不可以给命名空间取别名
using usingStd = std; //这是不允许的
  • using 是有作用域的

2. 更为详细的叙述

  • eg1利用了typedef和using给CPerson类重命名,并调用其成员函数,typedef和using作用都是给类型取别名。
  • eg2:利用typedef和using给函数类型取别名。
  • eg3、eg4,是为了验证using取别名是有作用域的,即eg3不合法,在作用域范围之外定义usingInt变量不合法,eg4是在作用域之内。
  • eg5:给命名空间取别名采用赋值法,不能使用using
  • eg6:利用using引入命名空间
    详细代码如下:
#include 
#include 
 
class CPerson
{
public:
	void setName(std::string name)
	{
		name_ = name;
	}
 
	std::string getName()
	{
		return name_;
	}
public:
	std::string name_;
	int age_;
};
 
using usingCperson = CPerson;
typedef CPerson typedefCperson;
 
//using setName = CPerson::setName;//this is error CPerson::setName不是类型名
 
 
void egFunc(std::string str)
{
	std::cout << "egFunc:" << str<<std::endl;
}
 
using usingFunc = void(*)(std::string str);
typedef void(*typedefFunc)(std::string str);
 
int main(int argc, char** argv)
{
	///eg1
	usingCperson ucp;
	ucp.setName("xiaohong");
	std::cout << ucp.getName() << std::endl;
 
	typedefCperson tdcp;
	tdcp.setName("xiaoming");
	std::cout << tdcp.getName() << std::endl;
 
	///eg2
	usingFunc uf = egFunc;
	typedefFunc tf = egFunc;
	uf("this is uf");
	tf("this is tf");
 
	//eg3
	//{
	//	using usingInt = int;
	//}
	//usingInt uI = 1;
 
 
	//eg4
	{
		using usingInt = int;
		usingInt uI = 1;
		std::cout << "uI=" << uI << std::endl;
	}
 
	//eg5
	// 命名空间别名
	//using usingStd = std; 无法这样写
	namespace nsStd = std;
	nsStd::cout << "this is nsStd cout" << std::endl;
 
	//eg6
	using namespace std;
	cout << "this is using namespace std;" << endl;
}
 

你可能感兴趣的:(c++,开发语言)