最简C++11笔记

最简C++11笔记

  1. Move语义

    避免复制开销,转移指针的所有权。

  2. 右值引用

    右值引用通过A&&创建,实现move语义和理想的参数传递。

  3. 变长模板

    可以传入0到多个模板参数:

    template <typename... T>
    
    struct arity {
    constexpr static int value = sizeof...(T);
    };
    static_assert(arity<>::value == 0);
    static_assert(arity<char, short, int>::value == 3);
  4. 初始化列表

    比如auto list = { 1, 2, 3 };创建的类型是std::initializer_list<int>,可以用来替代一个对象的vector传给函数。

  5. 静态断言

    编译期评估的断言。

  6. auto

    根据初始化器的自动类型推断,大大增加了可读性。

  7. lambda表达式

    • [] : 不捕获
    • [=] : 按值捕获局部对象
    • [&] : 按引用捕获局部对象
    • [this] : 通过值捕获this指针
    • [a, &b] : 通过值捕获a, 通过引用捕获b
  8. decltype

    返回表达式的声明类型。

  9. 模板别名

    使用using代替typedef

  10. nullptr

    标准化的空指针定义,替代C语言的NULL宏,类型为std::nullptr_t。可以转换为指针类型,但不能转为整数。

  11. 强类型枚举

    类型安全的枚举:

    // Specifying underlying type as `unsigned int`
    enum class Color : unsigned int { Red = 0xff0000, Green = 0xff00, Blue = 0xff };
    // `Red`/`Green` in `Alert` don't conflict with `Color`
    enum class Alert : bool { Red, Green };
    Color c = Color::Red;
  12. 属性

    标准的属性定义方式。

    // `noreturn` attribute indicates `f` doesn't return.
    [[ noreturn ]] void f() {
    throw "error";
    }
  13. constexpr

    编译期可评估的表达式,运算一般不复杂。

  14. 代理构造函数

    构造函数可以调用其他构造函数了。

  15. 自定义字面量

    通过T operator "" X(...) { ... }的形式定义,返回T类型,名称为X。

  16. 显式虚继承

    语义同Java中的override关键字。

  17. Final限定词

    语义同Java中的final,禁止其他类型扩展。

  18. 默认函数

    优雅高效的定义函数的默认实现。

  19. 删除函数

    优雅高效的定义函数的禁用实现。如:A(const A&) = delete;

  20. 基于range的循环

    类似Java循环的语法糖:
    for (int& x : a) x *= 2;

  21. 实现move语义的特殊成员函数

    在C++11里,可以定义move构造器和move赋值函数。

  22. 转换构造器

    允许将括号()或{} 包含的列表转换为参数。

  23. 显式转换函数

    使用explicit限定词。

  24. 内联命名空间

    内联命名空间被认为是父母空间的一部分。

  25. 非静态数据成员的初始化器

    unsigned age{0};

  26. 右尖括号

    C++11允许连续的右尖括号,无需空格分隔。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值