C++ 11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++ 98中的标识临时变量的语义,由于使用极少且多余,在C++ 11中已被删除。
auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用auto的例子。
- auto a; // 错误,没有初始化表达式,无法推断出a的类型
- auto int a = 10 // 错误,auto临时变量的语义在C++ 11中已不存在
- auto a = 10
- auto c = 'A'
- auto s("hello");
- vector<int> vctTemp;
- auto it = vctTemp.begin();
- auto ptr = [](){ cout << "hello world" << endl; };
另外,在使用模板技术时,如果某个变量的类型依赖于模板参数,不使用auto将很难确定变量的类型(使用auto后,将由编译器自动进行确定)。下面是一个具体的例子。
- template <class T, class U>
- void Multiply(T t, U u)
- {
- auto v = t*u;
- }
auto返回值占位,主要与decltype配合使用,用于返回值类型后置时的占位。
- template <class T, class U>
- auto Multiply(T t, U u)->decltype(t*u)
- {
- typedef decltype(t*u) NewType;
- NewType *pResult = new NewType(t*u);
- return *pResult;
- }
至于为什么需要将返回值类型后置,这里简单说明一下。如果没有后置,则函数声明为decltype(t*u) Multiply(T t, U u),但此时模板参数t和u还未声明,编译无法通
过。另外,如果非要使用返回值类型前置的形式,也可以将函数声明为decltype((*(T *)0)*(*(U *)0)) Multiply(T t, U u),但这种形式比较晦涩难懂,因此不推荐采用。
相关推荐
在C++编程语言中,`volatile`关键字和`namespace`以及C++11引入的`auto`和`decltype`是三个非常重要的概念。它们分别用于处理多线程环境中的数据同步、代码组织以及类型推导。 首先,`volatile`关键字用于标记一个...
总结来说,`auto`和`decltype`都是C++11引入的类型推断工具,它们各有应用场景,`auto`主要用于简化变量声明,而`decltype`则更适合于需要根据表达式类型而非值推断类型的场景。两者结合使用可以编写出更加简洁且易...
6. **`auto`和`decltype`的区别**:`4汇总auto和decltype的区别.html`比较了`auto`和`decltype`两个C++11新特性。`auto`用于类型推断,简化变量声明,而`decltype`则用于根据表达式的类型获取类型信息,常用于模板和...
C++11中>>变得合法,并且能够顺利通过编译,例如我们可以定义一个二维向量vector,即在一层vector中再嵌套一层vector,这在C++11之前是不能被编译通过的。 五、Lambda表达式 Lambda表达式是一个匿名函数,也就是...
面向对象编程在C++11中得到了增强,例如支持委托构造和继承构造,显式虚函数重载,以及显式禁用默认函数等。 C++11还引入了新的类型系统特性,包括强类型枚举,它提供了更好的类型安全和作用域控制。 在运行期性能...
总的来说,`auto`和`decltype`都是C++11中提高代码清晰度和简化类型管理的重要工具。理解它们的用法和区别对于编写高效、简洁的C++11代码至关重要。学习并熟练掌握这些新特性,将有助于开发者更好地利用C++11提供的...
1. 模板编程:C++11 强化了模板编程的功能,提供了可变参数模板、类型推导(如 auto 和 decltype)、别名模板等特性,使得编写更灵活和强大的模板库成为可能。 2. 内存模型:C++11 提出了内存模型的概念,为多线程...
《ISO C++11和C++14标准》是C++编程语言的两个重要版本,它们为这个强大的系统级编程语言带来了许多革新和改进。C++11是自C++98以来的第一个重大更新,而C++14则是对C++11的进一步完善和扩展。这两个标准对C++程序员...
C++11是C++编程语言的一个重大更新版本,它引入了许多新特性和改进,以解决旧版本中一些已经存在的问题,并使语言更适合现代编程需求。以下是对C++11 FAQ中文版中内容的一些详细知识点的解释。 首先,C++11 FAQ中文...
附录中则介绍了C++11标准与其他相关标准的兼容性和区别、C++11中弃用的特性、编译器对C++11的支持情况,以及学习C++11的相关资源。《深入理解C++11:C++11新特性解析与应用》免责声明序前言第1章 新标准的诞生 11.1 ...
模板编程在C++11中也得到了加强,例如外部模板、模板别名、默认模板参数、变长参数模板和折叠表达式等特性,使得模板编程更加灵活和强大。 面向对象编程方面,C++11支持委托构造、继承构造、显式虚函数重载和显式...
总的来说,"Decltype和Auto (修订3)"这篇论文为理解和使用C++11及其后续版本中的decltype和auto提供了深入的见解。这两个特性极大地改进了类型推断,简化了模板编程,提高了C++代码的可读性,从而提升了整体的编程...
通过上述介绍的关键特性,如`auto`、`decltype`、`nullptr`、范围for循环和Lambda表达式等,开发者可以更加高效地利用C++11来构建高质量的应用程序。对于Cocos2d-x这样的游戏引擎而言,利用C++11的新特性可以进一步...
《深入理解C++11》是一本专注于C++11标准的权威指南,该书全面地阐述了C++11的新特性和改进,为程序员提供了深入解析这一现代C++版本的宝贵资源。C++11是C++语言的一个重要里程碑,它引入了大量的新功能和优化,旨在...
然而,我可以为您深入解释C++11语言版本的一些重要特性和设计思路,以满足您对C++11的深入理解需求。 C++11是C++编程语言的一个重大更新,它在2011年被国际标准化组织正式标准化。这个版本引入了大量新特性和改进,...
右值引用是C++11中实现移动语义的基础。 - **移动语义**:通过移动构造函数和移动赋值运算符,可以在对象之间高效地移动资源(如内存),而不是复制它们。这大大提高了效率,尤其是在处理大型数据结构时。 ##### ...
C++14引入了通用引用、二进制字面量、变量模板等新特性,以及对C++11部分特性的增强,如更灵活的返回类型推断(decltype(auto))。 最后,C++17(2017年)继续推进C++的现代化进程,添加了模块化、并行算法、类型...