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

相关文章

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C# WebAPI的几种返回类型方式

《C#WebAPI的几种返回类型方式》本文主要介绍了C#WebAPI的几种返回类型方式,包括直接返回指定类型、返回IActionResult实例和返回ActionResult,文中通过示例代码介绍的... 目录创建 Controller 和 Model 类在 Action 中返回 指定类型在 Action

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

Apache服务器IP自动跳转域名的问题及解决方案

《Apache服务器IP自动跳转域名的问题及解决方案》本教程将详细介绍如何通过Apache虚拟主机配置实现这一功能,并解决常见问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录​​问题背景​​解决方案​​方法 1:修改 httpd-vhosts.conf(推荐)​​步骤

idea-java序列化serialversionUID自动生成方式

《idea-java序列化serialversionUID自动生成方式》Java的Serializable接口用于实现对象的序列化和反序列化,通过将对象转换为字节流来存储或传输,实现Serializa... 目录简介实现序列化serialVersionUID配置使用总结简介Java.io.Seripyth

python中的鸭子类型详解

《python中的鸭子类型详解》鸭子类型是Python动态类型系统的灵魂,它通过强调“行为”而非“类型”,赋予了代码极大的灵活性和表现力,本文给大家详细介绍python中的鸭子类型,感兴趣的朋友一起看... 目录1. 核心思想:什么是鸭子类型?2. 与“传统”静态类型语言的对比3. python 中无处不在

Java枚举类型深度详解

《Java枚举类型深度详解》Java的枚举类型(enum)是一种强大的工具,它不仅可以让你的代码更简洁、可读,而且通过类型安全、常量集合、方法重写和接口实现等特性,使得枚举在很多场景下都非常有用,本文... 目录前言1. enum关键字的使用:定义枚举类型什么是枚举类型?如何定义枚举类型?使用枚举类型:2.

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS