
深入应用C++11
代码优化
BensonWang221
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
lambda表达式
语法形式:[ capture ] ( params ) opt -> ret { body; } 注意: 允许省略返回值类型,编译器会自动推导出返回类型。 在没有参数列表时,可以省略参数列表即小括号 [] 表示不捕获任何变量; [&] 捕获外部作用域所有变量,且作为引用在函数体中使用(按引用捕获) [=]捕获外部作用域所有变量,且作为副本使用(按值捕获) [=, &foo] 除了foo变量是按引用捕获,其它变量按值捕获 [bar]按值捕获bar变量 [this]捕获当前类原创 2020-05-28 21:53:49 · 120 阅读 · 0 评论 -
std::function与std::bind
std::function 可调用对象的包装器,它是一个类模板,可以容纳函数指针,仿函数或可被转换为函数指针的类对象 使用方法:在类型中填入函数签名(即函数类型,包括返回值和参数类型) #include <iostream> #include <functional> // for std::function void func(void) { std::cout << __FUNCTION__ << std::endl; } class F.原创 2020-05-27 23:21:32 · 156 阅读 · 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 · 728 阅读 · 0 评论 -
给类型起别名:typedef与using
1.using 的别名语法覆盖了 typedef 的全部功能: using new_name = old_name; typedef old_name new_name; typedef的定义方法和变量的声明类似:像声明一个变量一样; using后面立即跟随新标识符,语法更像赋值,更加清晰: //重定义unsigned int typedef unsigned int uint_t; using uint_t = unsigned int; //重定义map typedef std::map<原创 2020-05-11 22:57:04 · 239 阅读 · 0 评论 -
decltype关键字与返回类型后置
1.获知表达式类型: 在编译期完成类型推导 decltype(expression) 很像sizeof用来推导表达式类型大小 int x = 10; decltype(x) y = 1; // y->int decltype(x + y) z = 0; // z->int const int& i = x; decltype(i) j = y; // j->const int& 与auto的不同之处:decltype 不会像auto在某种情况下会抛弃c原创 2020-05-11 22:11:38 · 291 阅读 · 0 评论 -
auto关键字
1.auto不能用来声明,只是一个类型声明的占位符,使用auto声明的变量必须马上初始化,让编译器推断出变量的实际类型,在编译阶段将auto替换成真正类型。 auto x;//error 2.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 · 202 阅读 · 0 评论