XZ Blog XZ Blog
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xzhouzeng

@渐行。
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 后端开发

    • cmake介绍
    • \{}统一初始化方
    • C++11新特性
      • C++标准推荐使用标准库头文件
      • C++动态内存分配和静态的区别
      • C++类函数后面加const的作用
      • C++类和结构区别
      • C++内存区域
      • nullptr与NULL
      • priority_queue使用
      • string , cstring , string h 的区别
      • using与typedef定义别名区别
      • vector中[]和at访问区别
      • 常量指针和指针常量
      • 空类大小及相关介绍
      • 容器emplace与push操作
      • 数据结构操作——时间复杂度
      • 智能指针(Smart Pointers)
      • 最大堆的实现
    • Git

    • 博客搭建

    • Debug

    • python开发

    • 技术
    • 后端开发
    xzhouzeng
    2023-03-20
    目录

    C++11新特性

    # C++11新特性

    Created: March 19, 2024 1:38 PM

    C++11引入了许多重要的新特性,使得C++编程更加方便、安全,同时也更高效。这些特性涵盖了语言本身、标准库以及编程范式。以下是一些关键的C++11新特性及示例:

    # 1. 自动类型推断(auto)

    **auto**关键字允许编译器自动推断变量的类型,使得代码更简洁。

    auto x = 5; // x 被推断为 int
    auto y = 1.5; // y 被推断为 double
    
    1
    2

    # 2. 范围基于的for循环(Range-based for loop)

    允许遍历容器而无需直接操作迭代器或计数器。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (auto i : vec) {
        std::cout << i << " ";
    }
    
    1
    2
    3
    4

    # 3. Lambda表达式

    提供了定义匿名函数的能力,非常适合作为函数对象或闭包使用。

    cppCopy code
    std::vector<int> vec = {1, 2, 3, 4, 5};
    std::for_each(vec.begin(), vec.end(), [](int val) {
        std::cout << val << " ";
    });
    
    1
    2
    3
    4
    5

    # 4. 智能指针(Smart Pointers)

    std::unique_ptr、std::shared_ptr、**std::weak_ptr**提供了自动的内存管理,帮助避免内存泄漏。

    std::unique_ptr<int> ptr(new int(10));
    std::cout << *ptr << std::endl; // 使用*操作符访问ptr指向的值
    
    1
    2

    # 5. nullptr

    提供了一个标准的方式来表示空指针。

    int* ptr = nullptr;
    if (ptr == nullptr) {
        std::cout << "ptr is null" << std::endl;
    }
    
    1
    2
    3
    4

    # 6. 初始列表(Initializer lists)

    允许用花括号**{}**初始化任何对象。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    
    1

    # 7. 统一的初始化(Uniform initialization)

    使用花括号**{}**来初始化任何对象,消除了初始化方式的歧义。

    int x{5};
    std::vector<int> vec{1, 2, 3, 4, 5};
    
    1
    2

    # 8. 委托构造函数(Delegating Constructors)

    构造函数可以调用同一个类中的另一个构造函数,以避免代码重复。

    class MyClass {
    public:
        MyClass() : MyClass(0) { }
        MyClass(int value) : value(value) { }
    private:
        int value;
    };
    
    1
    2
    3
    4
    5
    6
    7

    # 9. 继承构造函数(Inheriting Constructors)

    子类可以继承父类的构造函数。

    class Base {
    public:
        Base(int x) { }
    };
    
    class Derived : public Base {
    using Base::Base; // 继承Base的构造函数
    };
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 10. 类型别名(Type Aliases)

    **using**关键字提供了一种新的定义类型别名的方法。

    using IntPtr = int*; // IntPtr现在是指向int的指针的别名
    
    1

    C++11的引入标志着C++编程范式的一大步进步,它不仅提高了编程效率,还增强了语言的表达能力和安全性。

    编辑 (opens new window)
    \{}统一初始化方
    C++标准推荐使用标准库头文件

    ← \{}统一初始化方 C++标准推荐使用标准库头文件→

    最近更新
    01
    VideoLLMs
    03-20
    02
    Video2Script
    12-07
    03
    多模态
    11-09
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 xzhouzeng | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式