Open CodingMie opened 8 years ago
auto x = expression;
例:
const int a = 10;
auto b = a;
const auto c = a;
例:
简化代码 例:
智能指针是基于RAII机制实现的类(模板),具有指针的行为(重载了operator*与operator->操作符), 即行为类似于指针的类对象,可以“智能”地销毁其所指对象。C++11中有unique_ptr、shared_ptr与weak_ptr等智能指针,可以对动态资源进行管理。
1、unique_ptr 是禁止复制赋值的,始终保持一个 unique_ptr 管理一个对象。
unique_pt<int> a(new int (11));
unique_ptr<int> b = a; //会出错
2、 unique_ptr 虽然不能赋值,但具有移动语义,可以通过 move() 函数转移对象的所有权。一旦被 move() 了,原来的 unique_ptr 则不再有效了。
unique_ptr<int> b = std::move(a);
或者,利用unique_ptr返回函数内创建的动态资源
3、unique_ptr为动态申请的内存提供异常安全,不需要delete
4、放在容器中
vector<unique_ptr<string>> a { new string{“c++”}, new string{“python”} };
Lambda Function(匿名函数):
语法
[capture](parameters) -> return_type { function_body }
例:[](int x, int y) -> int { return x + y; }
如果 lambda 代码块中包含了 return 语句,则该 lambda 表达式的返回类型由 return 语句的返回类型确定。如果没有 return 语句,则类似 void f(...) 函数。
Lambda表达式可以访问在它被调用的作用域内的局部变量。 capture 指定了在可见域范围内 lambda 表达式的代码内可见得外部变量的列表,具体解释如下:
优点:
函数对象能维护状态,但语法开销大,而函数指针语法开销小,却没法保存范围内的状态。 lambda函数结合了两者的优点,让你写出优雅简洁的代码。
何时使用lambda:
你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。 Lambda 表达式就可以用来做这件事。 例: 输出: