文章目录
article
cpp11
AI文章摘要
qwen-turbo-latest
加载中...
1. C++11特性
1.1 Lambda表达式
[ /*captrue-list*/ ]( /*arg-list*/ ){ /*function define*/ }
- 捕获列表: 捕获列表局部位置可见的局部变量.
- 值传递: a,b,…可以指定特定变量、=可以指定所有变量. 值传递变量为只读变量, mutable修饰才能该.
- 引用传递:&a,&b,…可以指定特定变量、/&可以指定所有变量.
- 返回值: 单行Lambda表达式可以不用写返回值, 表达式的返回值就是Lambda的返回值. 多行表达式可以在中括号后用
->type
声明 - 注意事项:
- 每一个lambda表达式的类型的都是唯一的, 只能通过auto关键字赋值到一个变量上.
- 函数模板的拥有自动类型推导特性, 所以它能使用lambda表达式作为参数进行传递.
- 捕获列表非空的Lambda表达式不能转换为函数指针, 空捕获列表的可以转化为同返回值和参数列表的函数指针
1.2 右值引用
2. 编译器优化
c++开启内联和编译器优化 循环会放大低效操作的影响,所以尽量将低效操作放在循环外部 对象参数使用引用或指针,移动语义,当传入参数是一个临时参数并且返回一个该临时参数时,直接在栈中创建该对象 不建议使用const string&(除非调用方确保有现有的string对象) string不建议在循环中反复创建,建议在循环外创建并使用clear函数刷新,减少内存管理函数的调用次数