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

相关文章

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换