c++11 新特性之 autokeyword
C++11是对眼下C++语言的扩展和修正.C++11包含大量的新特性:包含lambda表达式,类型推导keywordauto、decltype,和模板的大量改进。
g++编译c++11命令加上
-std=c++11
C++11中引入auto第一种作用是为了自己主动类型推导
auto的自己主动类型推导,用于从初始化表达式中判断出变量的数据类型。
通过auto的自己主动类型推导,能够简化我们的编程工作
auto实际上实在编译时对变量进行了类型推导,所以不会对程序的执行效率造成不良影响另外,似乎auto并不会影响编译速度,由于编译时本来也要右側推导然后推断与左側是否匹配。
#include <iostream>
#include <typeinfo>
#include <vector>
using namespace std; template<class T, class U>
void func(T t, U u)
{
auto ret = t*u;
} int main()
{
//auto a; // 错误,auto是通过初始化表达式进行行类型推导,假设没有初始化表达式,就无无法确定a的类型
auto i = 1;
cout << typeid(i).name() << endl; //输出为i,g++编译器下输出i为int类型,MS的vs2008输出为int
auto d = 1.0;
cout << typeid(d).name() << endl; //输出为d,double类型
auto str = "Hello C++11";
cout << str << endl; vector<int> iv;
iv.push_back(1);
iv.push_back(2);
iv.push_back(3); for (auto itr=iv.begin(); itr!=iv.end(); itr++) //自己主动推导为迭代器
cout << *itr << endl; return 0;
}
另外。在使用模板技术时。假设某个变量的类型依赖于模板參数,不使用auto将非常难确定变量的类型(使用auto后,将由编译器自己主动进行确定)。
以下是一个详细的样例。
template <class T, class U>
void Multiply(T t, U u)
{
auto v = t*u;
}
c++11 新特性之 autokeyword的更多相关文章
- C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...
- C++11新特性总结 (二)
1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...
- C++11新特性总结 (一)
1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己写了,看别人写的代码估计都会有些吃力.C++ Primer5是学习C++1 ...
- C++ 11 新特性
C++11新特性: 1.auto 2.nullptr 3.for 4.lambda表达式 5.override ...
- [转载] C++11新特性
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...
- 在C++98基础上学习C++11新特性
自己一直用的是C++98规范来编程,对于C++11只闻其名却没用过其特性.近期因为工作的需要,需要掌握C++11的一些特性,所以查阅了一些C++11资料.因为自己有C++98的基础,所以从C++98过 ...
- C++11新特性——range for
很多编程语言都有range for语法功能,自C++11起,终于将这个重要功能加入C++标准中.range for语句,可以方便的遍历给定序列中的每个元素并对其执行某种操作. 1.基本语法 for(d ...
- C++11新特性——大括号初始化
C++11之前,C++主要有以下几种初始化方式: //小括号初始化 string str("hello"); //等号初始化 string str="hello" ...
- C++11新特性之六——元编程
C++11新特性之六——元编程
随机推荐
- spring的常用配置
bean.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...
- jz2440: linux/arch/arm/下面的plat-和mach-
jz2440: linux/arch/arm/下面的plat和mach plat-s3c24xxmach-s3c2440mach-s3c2410 ====================== 1. 三 ...
- BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )
线段树.. --------------------------------------------------------------------------------- #include< ...
- Servlet转发和重定向的区别
附上视频教学的一张图: 区别: 1.转发产生一次请求,一次响应: 重定向产生2次请求 两次响应 2.转发客户端不可见的: 重定向客户端是可以察觉的. 3.转发时候url不变: 重定向URL会改变 案例 ...
- QT设置前景图位置(配色简单漂亮)
QPushButton { background-image: url(:/Resources/green_click.png); image: url(:/Resources/toolsbutton ...
- wchar_t是内置还是别名(亲测有效:wchar_t在windows下是16位整数的别名,在linux等平台下是32位整数的别名。MSVC2008开始默认是/Zc:wchar_t)
接前一篇C++ ABI之名字改编(以Qt为例),继续看看C++名字改编相关的问题. 问题 MSVC 有一对选项/Zc:wchar_t- 与 /Zc:wchar_t控制wchar_t 于是 wchar_ ...
- 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(一)
Replica Sets(复制集)是在mongodDB1.6版本号開始新增的功能.它能够实现故障自己主动切换和自己主动修复功能成员节点的功能,各个DB之间的数据全然一致,大大减少了单点故障的风险. ...
- iOS 如何自定义NavigationBar的高度
UINavigationBar的高度在苹果官方的SDK中是固定的44个点,但是实际项目中我们却有可能遇到这样的情况,如下图: 这样的一个UINavigationBar的高度达到了84个点,这就需要我们 ...
- C++,对象成员的访问
成员变量和成员函数的访问可以采用以下几种访问方式:对象.成员变量名: 对象.成员函数名(实参列表)对象的指针->成员变量名; 对象的指针->成员函数名(实参列表)对象的引用.成员变量名对象 ...
- hadoop -- mapreduce执行过程
1.运行mapreduce程序 ---run2.本次运行将会生成呢个一个Job , 于是JobClient向JobTracker申请一个JobID 标识该Job.3.JobClient将Job需要的 ...