深入应用C++11
代码优化
BensonWang221
这个作者很懒,什么都没留下…
展开
-
lambda表达式
语法形式:[ capture ] ( params ) opt -> ret { body; }注意:允许省略返回值类型,编译器会自动推导出返回类型。在没有参数列表时,可以省略参数列表即小括号[] 表示不捕获任何变量;[&] 捕获外部作用域所有变量,且作为引用在函数体中使用(按引用捕获)[=]捕获外部作用域所有变量,且作为副本使用(按值捕获)[=, &foo] 除了foo变量是按引用捕获,其它变量按值捕获[bar]按值捕获bar变量[this]捕获当前类原创 2020-05-28 21:53:49 · 95 阅读 · 0 评论 -
std::function与std::bind
std::function 可调用对象的包装器,它是一个类模板,可以容纳函数指针,仿函数或可被转换为函数指针的类对象使用方法:在类型中填入函数签名(即函数类型,包括返回值和参数类型)#include <iostream>#include <functional> // for std::functionvoid func(void){ std::cout << __FUNCTION__ << std::endl;}class F.原创 2020-05-27 23:21:32 · 125 阅读 · 0 评论 -
列表初始化与std::initializer_list
C++11中,列表初始化可以用于任何类型对象的初始化1){}前面的 = 可有可无:int a {12};int a = {12}; // 两种方式等同2)new操作符等可以用()初始化的地方也可以换作列表初始化,**堆上动态分配的数组也可以使用初始化列表来初始化**。int* a = new int(10);int* a = new int {10}; // 两种方式等同int* b = new int[3] { 1, 2, 3}; // 可用列表初始化动态分配的空间!// .原创 2020-05-12 22:53:21 · 680 阅读 · 0 评论 -
给类型起别名:typedef与using
1.using 的别名语法覆盖了 typedef 的全部功能:using new_name = old_name; typedef old_name new_name;typedef的定义方法和变量的声明类似:像声明一个变量一样;using后面立即跟随新标识符,语法更像赋值,更加清晰://重定义unsigned inttypedef unsigned int uint_t;using uint_t = unsigned int;//重定义maptypedef std::map<原创 2020-05-11 22:57:04 · 210 阅读 · 0 评论 -
decltype关键字与返回类型后置
1.获知表达式类型: 在编译期完成类型推导decltype(expression) 很像sizeof用来推导表达式类型大小int x = 10;decltype(x) y = 1; // y->intdecltype(x + y) z = 0; // z->intconst int& i = x;decltype(i) j = y; // j->const int&与auto的不同之处:decltype 不会像auto在某种情况下会抛弃c原创 2020-05-11 22:11:38 · 258 阅读 · 0 评论 -
auto关键字
1.auto不能用来声明,只是一个类型声明的占位符,使用auto声明的变量必须马上初始化,让编译器推断出变量的实际类型,在编译阶段将auto替换成真正类型。auto x;//error2.auto推导规则:可以同指针,引用结合起来,还可以带上cv限定符(const和volatile)1)当不声明为指针或引用时,auto的推导结果会抛弃cv限定符。example:int x = 10;const auto e = x; // e->const int, auto 为...原创 2020-05-10 22:41:57 · 176 阅读 · 0 评论