ghostbody / 15-cpp-learning

15 c++ learning repository of SDCS SYSU
6 stars 3 forks source link

C++11 learning #22

Open pfjhyyj opened 8 years ago

pfjhyyj commented 8 years ago

lambda function

基本形式 [capture list] (parameter list) mutable exception -> return type {function body} capture list (捕获列表): 在lambda所在函数中定义的局部变量的列表 (可为空

[ ] 空捕获列表 [name1] name 为局部变量名,使用值捕获 [&name] name 为局部变量名,使用引用捕获 [&] 隐式捕获(引用) [=] 隐式捕获(值) (lambda中需要什么就获取什么)

parameter list(参数列表): 调用时需要使用的参数的列表(可为空) mutable : 使用此声明则lambda函数中可以更改捕获列表中变量的值(可不使用) exception : 表示函数可以抛出的异常类 return type : 说明返回类型,部分情况下可以省略(可为空)

可以按照return的类型来判断 如果无返回值,则被认为是返回void类型 以下情况会产生编译错误

[ ] (int i) {if (i < 0) return -i; else return i;}

编译器推断返回类型为void,但返回了int

[ ] (int i) {return i < 0 ? -i : i;}

编译可以通过,返回int

funtion body : 函数体

用处

当需要一个不需要在很多地方多次使用的函数时,lambda表达式简单而有效 如在find_if中

auto wc = find_if(w.begin(), w.end(), [_size] (const string &a) return {a.size() >= _size;})
pfjhyyj commented 8 years ago

auto

基本形式 auto 变量名 = 表达式; 编译器会按照表达式的类型来确定auto是什么 ××auto 不能只用于声明变量××

std::list<int> li;
for (auto i = li.front(); i != li.back(); li++) {
    //function body
}

关于const

const int ci = 1;
auto x = ci;  //  x类型为int
const auto y = ci;  //x类型为const int

用处

可以用于简化声明,如上例所示,提高编写代码的效率 但不可以滥用,会使程序可读性下降