VC10中的C++0x特性 Part 1:Lambdas,auto,以及 static_assert

简介

这一系列文章介绍Microsoft Visual Studio 2010 中支持的C++ 0x特性,目前有三部分。

Part 1 :介绍了Lambdas, 赋予新意义的auto,以及 static_assert;

Part 2( 一 , 二 , 三 ):介绍了右值引用(Rvalue References);

Part 3:介绍了表达式类型(decltype)

本文为 Part 1。

Microsoft Visual Studio 2010 九月社区技术预览版 (CTP)所带的Visual C++编译器对四个C++0x语言特性提供了支持,也就是 lambdas,auto,static_assert,以及 rvalue references (右值引用,译注:后面不再对这个词进行翻译)。今天,我将详细介绍前三个特性。(很快我将贡献一整篇幅的文章来解释右值引用,仅仅是因为再在这里解释的话将会加大这篇已经很长的文章的篇幅)

首先,说明一些事情:

1,今天的这篇文章是由 Stephan T. Lavavej,Visual C++库的开发人员以及C, A, 与 T读者投书栏带给你们的。注意作为库的开发人员,我并没有实现这些特性。那是 Jonathan Caves,前端编译器开发者,选举标准委员会成员以及所有“忍者”(鲜为人知的高手)的成果。

2,我将 Visual C++ compiler in VS 2010 简称为 VC10 ( VS 2008 包含 VC9,VS 2005 包含 VC8,等等。 - 10 并不比 2010 简短)

3,C++0x 指的是即将到来的 C++ 标准,现在还在起草中。(C++标准委员会希望它可以在 2009 年完成,称作 C++ 09;玩笑话说如果它推迟到 2010 或者更晚的话,“x” 将是十六进制的了)。 C++ 98 和C++ 03 指的是当前的 C++ 标准。(在这里不回顾历史了, C++ 标准 2003 仅仅是最初的 C++ 1998 标准 的“补丁”版,对大部分人来说可以忽略两者间的区别。C++ 03 和 C++ 0x 模样虽然看起来差不多,但完全不同)

4,我要感谢标准委员会开发出这些奇妙而有用并富有艺术的特性。他们也在以下站点上提供了重要的文档:

C++0x 语言特性:

http://open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2705.html

C++0x 库特性:

http://open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2706.html

C++0x 进行中的草案:

http://open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2798.pdf

5,总是会有bug的(虽然希望不会太多),这也就是发布 CTP 版本的主要目的(让用户测试发现 bug )。请通过 Microfsoft 把这些 bug 报告给我们。

现在,让我们来审视这些特性吧!

lambdas

在 C++ 0x 中,“lambda 表达式”隐式定义并构建不具名函数对象,这些对象就像手写函数对象一样。下面是 lambda “Hello,World”入门级的示例:

C:\Temp>type meow.cpp
#include <algorithm>
#include <iostream>
#include <ostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v;

    for (int i = 0; i < 10; ++i) {
        v.push_back(i);
    }

    for_each(v.begin(), v.end(), [](int n) { cout << n << " "; });
    cout << endl;
}
C:\Temp>cl /EHsc /nologo /W4 meow.cpp > NUL && meow
0 1 2 3 4 5 6 7 8 9

时间: 2024-10-04 15:37:58

VC10中的C++0x特性 Part 1:Lambdas,auto,以及 static_assert的相关文章

VC10中的C++0x特性 part 3:声明之类型

本文为 Part 3. 今天我要讲 decltype,它让完美转发函数能够返回任意类型的东西.对编写高度泛型的人来说这是很有趣的的特性. 返回类型问题 C++98/03 有一个有意思的盲点:给定一个像 x * y 的表达式, x 和 y 是任意类型,你却没法知道 x * y 的类型.假如 x 是 Watts 类型的, y 是 Seconds 类型的,那 x * y 的类型可能会是 Joules 类型的. 给定声明 print(const T& t),调用 print( x * y ) ,在这里

VC10中的C++0x特性 Part 2 (3):右值引用

本文为 Part 2 的第三页 转发问题 在程序员不用写高度泛化的代码的时候,C++98/03 的 lvalue,rvalue,引用,还有模板看起来是很完美的.假设你要写一个完全泛化的函数 outer(),这个函数的目的是将任意数目个任意类型的参数传递(也就是"转发")给函数 inner().已有很多不错的解决方案,比如 factory 函数 make_shared<T>(args) 是把 args 传给 T 的构造函数,然后返回 shared_ptr<T>.(

VC10中的C++0x特性 Part 2 (1):右值引用

本文为 Part 2 的第一页 今天我要讲的是 rvalue references (右值引用),它能实现两件不同的事情: move 语意和完美转发.刚开始会觉得它们难以理解,因为需要区分 lvalues 和 rvalues ,而只有极少数 C++98/03 程序员对此非常熟悉.这篇文章会很长,因为我打算极其详尽地解释 rvalue references 的运作机制. 不用害怕,使用 ravlue references 是很容易的,比听起来要容易得多.要在你的代码中实现 move semanti

VC10中的C++0x特性 part 2(2):右值引用

本文为 Part 2 第二页. move 语意:从 lvalue 移动 现在,如果你喜欢用拷贝赋值函数来实现你的拷贝构造函数该怎样做呢,那你也可能试图用 move 拷贝赋值函数来实现 move 构造函数.这样作是可以的,但是你得小心.下面就是一个错误的实现: C:\Temp>type unified_wrong.cpp #include <stddef.h> #include <iostream> #include <ostream> using namespac

IBM DB2 Express-C 9.5.2中激动人心的新特性

或许您已经知道,DB2 Express-C 是 DB2 免费的社区版本.您可以将它应用在产品中,或者在应用系统中分发,或者只是为了简单的开发目的而使用它,并且所有这些都是免费的!尽管 DB2 Express – C 只能使用两个处理器和 2G 内存,但是您可以在任何大小的服务器上安装它,而且在数据库的大小上是没有任何限制的.与其他厂商提供的社区版本相比,这是相当慷慨的捐赠了. DB2 Express-C 的 9.5 版是在 2007 年 11 月发布.从那时起,几个重要的改进和新的特性已被添加到

在项目中透明地引入特性开关

在前几期的InfoQ专栏中刊登了一篇名为"使用功能开关更好地实现持续部署"的文章,文中讲解了 特性开关与Spring的集成应用.但如果项目没有依赖Spring,又该如何更好地使用特性开关呢?同时, 又该如何透明地引入,使得项目不至于完全依赖特性开关呢? 接下来我将结合我们在项目中实 际运用特性开关的经验,从另一个角度为大家介绍如何使用特性开关透明地实现功能屏蔽. 问 题 我们的团队正在开发一款在线保险产品,该产品下包括若干品牌,每个品牌有不同的目标用 户群,但提供的服务基本相同.当第一

ORACLE 12C RAC中使用in memory特性请注意parallel_degree_policy和parallel_force_local参数

在12C RAC的in memory测试中由于未正确启用并行,导致测试结果flush buffer cache后,总是出现大量并行,通过ORACLE 各方努力最终确定是由于parallel_degree_policy=AUTO和parallel_force_local=false开始未设置正确导致.在rac中需要imdb的朋友请注意这两个参数. 设置表存放中inmemory SQL> alter table CHF.XIFENFEI_888 inmemory; Table altered. SQ

IDH HBase中实现的一些特性

IDH为Intel's Distribution of Hadoop的简称,中文为英特尔Hadoop发行版,目前应该没有人在维护该产品了.这里简单介绍一下IDH HBase中实现的一些特性. 以下部分内容摘自IDH官方的一些文档,部分内容来自我的整理: 1. 单调数据的加盐处理 对于写入的rowkey是基本单调的(例如时序数据),IDH引入了一个新的接口:SaltedTableInterface 提高近乎透明的"加盐",方便使用 封装了get.scan.put.delete等操作 2.

《Access 2007开发指南(修订版)》一一1.10 Access 2007中的其他新特性

1.10 Access 2007中的其他新特性 Access 2007开发指南(修订版) Access 2007极大地增强了导入和导出功能.例如,现在可以导出到PDF和XPS字段:也可以保存导入和导出的具体规范,这样用户以后就可以重复使用它.在第20章中将介绍这些功能. Access 2007和Outlook 2007是紧密地结合在一起的.可以使用Outlook 2007收集和更新数据.当使用新的"数据收集"功能时,Access 2007会自动创建一个Microsoft Office