Visual Studio2010新特性--C++王者归来(1)--数据类型自动类型判别

 

 VC++2010在c++语言里面增加了一个特殊的新特性,c++语言可以自动判别数据类型,

而无需跟以前的c++语言一样,需要先定义数据,再使用,c++编译器将自动识别数据类型,

给程序员带来了更多的灵活性与便捷!

auto这个关键字来自VC++ 6.0标准。在VC++ 6.0中它没有什么作用,C++ 0x中“借用”它来作为自动类型推演(automatic type deduction)。当auto出现在声明中时,它表示“请用初始化我的表达式类型作为我的类型”。数据类型可以在编译时推演, 有了auto关键字再也不用写又长又烦的代码了。

请见下列代码,基于vc++2010编译器编译成功,采用图的数据结构进行演示。

 

 

#include "stdafx.h" 
#include <map>
#include <vector>
#include <string>
#include <iostream>

using namespace std;

#ifdef UNICODE
	#define tcout wcout
#else
	#define tcout cout
#endif

const vector< basic_string<TCHAR> >* PrintContents(const map<int, vector< basic_string<TCHAR> > >& theMap)
{
	for each (auto m in theMap)
	{
		tcout << _T("Map element ") << m.first << _T(": ");
		for each(auto e in m.second)
		{
			tcout << _T("'") << e << _T("', ");
		}
		tcout << endl;
	}
	return NULL;
}

int _tmain(int argc, _TCHAR* argv[])
{
	// / /定义一个图的数据结构,一个整数的字符串类型的字符串
	map<int, vector< basic_string<TCHAR> > > myMap;
	// 填充图数据
	vector< basic_string<TCHAR> > vec1;
	vec1.push_back(_T("string 1-1"));
	vec1.push_back(_T("string 1-2"));
	vec1.push_back(_T("string 1-3"));
	myMap[1] = vec1;

	vector< basic_string<TCHAR> > vec2;
	vec2.push_back(_T("string 2-1"));
	vec2.push_back(_T("string 2-2"));
	vec2.push_back(_T("string 2-3"));
	myMap[2] = vec2;

	// 输出图数据
	tcout << _T("Map contents:") << endl;
	for (map<int, vector< basic_string<TCHAR> > >::const_iterator citer = myMap.begin();
		citer != myMap.end(); ++citer)
	{
		tcout << _T("Map element ") << (*citer).first << _T(": ");
		for (vector< basic_string<TCHAR> >::const_iterator citer2 = (*citer).second.begin();
			citer2 != (*citer).second.end(); ++citer2)
		{
			tcout << _T("'") << (*citer2) << _T("', ");
		}
		tcout << endl;
	}
	tcout << endl;

	// 输出图数据采用自动类型判别
	tcout << _T("采用自动类型判别:") << endl;
	for (auto citer = myMap.begin(); citer != myMap.end(); ++citer)
	{
		tcout << _T("Map element ") << (*citer).first << _T(": ");
		for (auto citer2 = (*citer).second.begin(); citer2 != (*citer).second.end(); ++citer2)
		{
			tcout << _T("'") << (*citer2) << _T("', ");
		}
		tcout << endl;
	}
	tcout << endl;

	// 输出图数据采用自动类型判别(兼容 VC++ 2010)
	tcout << _T("自动类型判别:") << endl;
	for each (auto m in myMap)
	{
		tcout << _T("Map element ") << m.first << _T(": ");
		for each(auto e in m.second)
		{
			tcout << _T("'") << e << _T("', ");
		}
		tcout << endl;
	}
	tcout << endl;

	// 打印图数据使用函数指针
	const vector< basic_string<TCHAR> >* (*p)(const map<int, vector< basic_string<TCHAR> > >&) = &PrintContents;
	tcout << _T("Map contents using a function pointer:") << endl;
	p(myMap);
	tcout << endl;

	//打印 图数据借助自动类型输出使用函数指针
	auto f = &PrintContents;
	tcout << _T("Map contents using auto as a function pointer:") << endl;
	f(myMap);
	tcout << endl;

	return 0;
}

需要源码请在本人CSDN博客留下Email,欢迎技术交流!

 

本文作者专著《Visual C++2010开发权威指南》即将推出,敬请关注,Visual C++2010最近技术,Windows7开发最新技术!


原文链接: http://blog.csdn.net/yincheng01/article/details/5367045

你可能感兴趣的:(Visual Studio2010新特性--C++王者归来(1)--数据类型自动类型判别)