c++中重要的基本概念

全局

namespace

使用namespace能够有效解决命名冲突的问题! 新版的c++提倡使用namespace 代替static(which is deprecated).
使用anonymous namespace , 编译器会自动为之生成一个唯一的名字,相当于: ↓ \downarrow

namespace { 
         char c;
         int i;
         double d;

}
相当于:
    namespace __UNIQUE_NAME_ {
         char c;
         int i;
         double d;
     }
     using namespace __UNIQUE_NAME_;

1.命名空间及匿名namespace

  • 命名空间的使用(using namespace xxx)可以在函数内使用,而命名空间只限制在该函数内
  • 命名空间可以有别名.
  • 编译器通常由函数的原型,函数的类名,函数的空间名来生成/定位一个独一无二的函数名字.\
  • 命名空间相关工作在编译期完成,因此开销是值当的,推荐的!
  • **除了类的成员函数/属性外,推荐使用匿名namespace代替static实现信息隐藏.

Function

functor

???

lambda

λ \lambda λ
1. lambda表达式

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

Constructs a closure: an unnamed function object capable of capturing variables in scope. Lambda expression is a an anonymous function.
[capture list] (parameter list ) mutable exception ->return_type { function body }

  • (implicitly)捕获外部变量列表.
    [] // 不捕获任何外部变量
    [=]// 以值的形式捕获所有外部变量
    [&] // 以引用形式捕获所有外部变量
    [x, &y] // x 以传值形式捕获,y 以引用形式捕获
    [=, &z]// z 以引用形式捕获,其余变量以传值形式捕获
    [&, x]// x 以值的形式捕获,其余变量以引用形式捕获
  • 参数列表中不能有默认参数
    不支持可变参数
    所有参数必须有参数名
    e.g.:    int m = [](int x) { return [](int y) { return y * 2; }(x)+6; }(5); // m == 16
  • "mutable"用来说用是否可以修改捕获的变量: auto f = amutable { cout << ++a; }; // 不会报错
  • return_type: Can be omitted, then got by automatically derivation-----by return statement or void by default
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值