本文主要是介绍Visual Studio2010新特性--auto 数据类型自动类型判别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转载于http://blog.csdn.net/itcastcpp/article/details/5367045
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;
- }
这篇关于Visual Studio2010新特性--auto 数据类型自动类型判别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!