栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于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;     这里是双括号,即将变量定义为引用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/655803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号