🤖 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函数刷新,减少内存管理函数的调用次数