Visual Studio2010新特性--auto 数据类型自动类型判别

2023-10-19 17:32

本文主要是介绍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编译器编译成功,采用图的数据结构进行演示。

 

  1. #include "stdafx.h"   
  2. #include <map>  
  3. #include <vector>  
  4. #include <string>  
  5. #include <iostream>  
  6.   
  7. using namespace std;  
  8.  
  9. #ifdef UNICODE  
  10.     #define tcout wcout  
  11. #else  
  12.     #define tcout cout  
  13. #endif  
  14.   
  15. const vector< basic_string<TCHAR> >* PrintContents(const map<int, vector< basic_string<TCHAR> > >& theMap)  
  16. {  
  17.     for each (auto m in theMap)  
  18.     {  
  19.         tcout << _T("Map element ") << m.first << _T(": ");  
  20.         for each(auto e in m.second)  
  21.         {  
  22.             tcout << _T("'") << e << _T("', ");  
  23.         }  
  24.         tcout << endl;  
  25.     }  
  26.     return NULL;  
  27. }  
  28.   
  29. int _tmain(int argc, _TCHAR* argv[])  
  30. {  
  31.     // / /定义一个图的数据结构,一个整数的字符串类型的字符串  
  32.     map<int, vector< basic_string<TCHAR> > > myMap;  
  33.     // 填充图数据  
  34.     vector< basic_string<TCHAR> > vec1;  
  35.     vec1.push_back(_T("string 1-1"));  
  36.     vec1.push_back(_T("string 1-2"));  
  37.     vec1.push_back(_T("string 1-3"));  
  38.     myMap[1] = vec1;  
  39.   
  40.     vector< basic_string<TCHAR> > vec2;  
  41.     vec2.push_back(_T("string 2-1"));  
  42.     vec2.push_back(_T("string 2-2"));  
  43.     vec2.push_back(_T("string 2-3"));  
  44.     myMap[2] = vec2;  
  45.   
  46.     // 输出图数据  
  47.     tcout << _T("Map contents:") << endl;  
  48.     for (map<int, vector< basic_string<TCHAR> > >::const_iterator citer = myMap.begin();  
  49.         citer != myMap.end(); ++citer)  
  50.     {  
  51.         tcout << _T("Map element ") << (*citer).first << _T(": ");  
  52.         for (vector< basic_string<TCHAR> >::const_iterator citer2 = (*citer).second.begin();  
  53.             citer2 != (*citer).second.end(); ++citer2)  
  54.         {  
  55.             tcout << _T("'") << (*citer2) << _T("', ");  
  56.         }  
  57.         tcout << endl;  
  58.     }  
  59.     tcout << endl;  
  60.   
  61.     // 输出图数据采用自动类型判别  
  62.     tcout << _T("采用自动类型判别:") << endl;  
  63.     for (auto citer = myMap.begin(); citer != myMap.end(); ++citer)  
  64.     {  
  65.         tcout << _T("Map element ") << (*citer).first << _T(": ");  
  66.         for (auto citer2 = (*citer).second.begin(); citer2 != (*citer).second.end(); ++citer2)  
  67.         {  
  68.             tcout << _T("'") << (*citer2) << _T("', ");  
  69.         }  
  70.         tcout << endl;  
  71.     }  
  72.     tcout << endl;  
  73.   
  74.     // 输出图数据采用自动类型判别(兼容 VC++ 2010)  
  75.     tcout << _T("自动类型判别:") << endl;  
  76.     for each (auto m in myMap)  
  77.     {  
  78.         tcout << _T("Map element ") << m.first << _T(": ");  
  79.         for each(auto e in m.second)  
  80.         {  
  81.             tcout << _T("'") << e << _T("', ");  
  82.         }  
  83.         tcout << endl;  
  84.     }  
  85.     tcout << endl;  
  86.   
  87.     // 打印图数据使用函数指针  
  88.     const vector< basic_string<TCHAR> >* (*p)(const map<int, vector< basic_string<TCHAR> > >&) = &PrintContents;  
  89.     tcout << _T("Map contents using a function pointer:") << endl;  
  90.     p(myMap);  
  91.     tcout << endl;  
  92.   
  93.     //打印 图数据借助自动类型输出使用函数指针  
  94.     auto f = &PrintContents;  
  95.     tcout << _T("Map contents using auto as a function pointer:") << endl;  
  96.     f(myMap);  
  97.     tcout << endl;  
  98.   
  99.     return 0;  
  100. }  

这篇关于Visual Studio2010新特性--auto 数据类型自动类型判别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241310

相关文章

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

全解析CSS Grid 的 auto-fill 和 auto-fit 内容自适应

《全解析CSSGrid的auto-fill和auto-fit内容自适应》:本文主要介绍了全解析CSSGrid的auto-fill和auto-fit内容自适应的相关资料,详细内容请阅读本文,希望能对你有所帮助... css  Grid 的 auto-fill 和 auto-fit/* 父元素 */.gri

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注