关于c++使用标准库中的名字以及类型别名说明(typedef,using,auto,decltype)

关于c++使用标准库中的名字以及类型别名说明(typedef,using,auto,decltype),第1张

关于c++使用标准库中的名字以及类型别名说明(typedef,using,auto,decltype)

下面编辑一个使用IO库的程序

#include
int main()
{
	std::cout << "Enter two numbers :" << std::endl;
	int v1 = 0, v2 = 0;
	std::cin >> v1 >> v2;
	std::cout << "The sum of " << v1 << " and " << v2 
			  << " is " << v1 + v2 << std::endl;
	return 0;
}

        我们这里程序使用了std::cout以及std::cin、std::endl等,std前缀定义在名为std的命名空间中的,命名空间可以帮助我们不经意的名字定义冲突,标准库定义的所有名字都在命名空间std中。要是想使用来自命名空间中的名字就要加前缀std以及作用域运算符(::)若果想简化程序编写,可以在程序开头用using声明。        

using namespace::name
using namespace::cout;
using namespace::cin;
using namespace::string;

        这样就不用在程序编写过程中写前缀std;也可用最简洁的办法

using namespace std;

        这样就可以不用给每个标准库中的名字进行声明了;

类型别名

        类型别名是一个名字,它是某种类型的同义词,实用类型别名可以让复杂的类型名字变得更简单明了,易于理解和使用,还有助于程序员清楚的指导使用该类型的真实目的。

        传统方法是使用关键字typedef:

        typedef double db;                             这里db就等价double了

        typedef db  sd,*p;                               这里根据等价规则,sd等价db等价double,而*p等价于double*类型。

        

#include
using namespace std;
int main()
{
	typedef double db;
	typedef double sd;
	db a;
	sd b;
	cin >> a >> b;
	cout << a << " " << b << endl;
	return 0;
}

        新标准中规定了一种新方法,使用别名声明来定义类型的别名,

        using SI=Sale_item;

        这种方法用关键字using作为别名声明的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。     

using SI = Sale_item;
auto类型说明符

        编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚的知道表达式类型。然而做到这一点并非那么容易,有时甚至根本做不到。为了解决这个问题c++11引入了人auto类型说明符。

        auto 让编译通过初始值来推算变量的类型。

        auto item=val1+val2;                        item初始化为val1与val2相加的结果,此时编译器根据其相加的结果推断item的类型。

#include
#include
using namespace std;
int main()
{
	vectorv;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	for (vector::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	for (auto it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

 

这里就将auto等号右侧的表达式类型赋给等号左侧

decltype类型指示符

        有时会遇到这种情况:希望从表达式的类型推断出要定义的变量的类型,但不想用该表达式的值初始化变量。c++11新标准引入了第二种类型说明符decltype.

        decltype(f()) sum =x;                sum类型就是函数f的返回类型。

decltype与auto的一个重要区别就是decltype的类型与表达式形式密切相关。

举个简单的例子

#include
#include
using namespace std;
int main()
{
	vectorv;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	for (vector::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	for (decltype(v.begin()) it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

 

第二个遍历就是用decltype定义it为迭代器类型,其中表达式为v.begin();

 当decltype((item)) sum=x;     这里是双括号,即将变量定义为引用。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5657889.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存