WEB开发网
开发学院软件开发VC VC10中的C++0x特性 Part 1:Lambdas,auto,以及 ... 阅读

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

 2009-06-10 20:07:49 来源:WEB开发网   
核心提示: 这样,C++0x 在内部将它转换成如你在C++ 98 下编写的一样代码: C:Temp>type meow98.cpp#include <algorithm>#include <iostream>#include <ostream>#include

这样,C++0x 在内部将它转换成如你在C++ 98 下编写的一样代码:

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

struct LambdaFunctor {
    void operator()(int n) const {
        cout << n << " ";
    }
};

int main() {
    vector<int> v;

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

    for_each(v.begin(), v.end(), LambdaFunctor());
    cout << endl;
}

C:Temp>cl /EHsc /nologo /W4 meow98.cpp > NUL && meow98
0 1 2 3 4 5 6 7 8 9

现在我将不再累述类似“不具名函数对象类的函数调用操作符默认返回 void”这样的话,开始换用“lambda 函数返回 void”的说法,但是记住 lambda 表达式做了些什么是很重要的,那就是:定义类并构建对象。

当然,lambda 的复合声明部分(函数体部分)可以包含多个声明语句,譬如:

C:Temp>type multimeow.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;

        if (n % 2 == 0) {
            cout << " even ";
        } else {
            cout << " odd ";
        }
    });

    cout << endl;
}

C:Temp>cl /EHsc /nologo /W4 multimeow.cpp > NUL && multimeow
0 even 1 odd 2 even 3 odd 4 even 5 odd 6 even 7 odd 8 even 9 odd

上一页  1 2 3 4 5 6 7 8  下一页

Tags:VC 特性 Part

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接