随笔分类 - C++11新特性
摘要:class Buffer { public: explicit Buffer(int capacity) : capacity_(capacity), len_(0), buff_(new char[capacity] {0}) { std::cout << "默认的构造函数" << std::en
阅读全文
摘要:概述 std::move 是 C++ 标准库中的一个函数模板,用于将一个左值(左值引用)转化为右值引用,从而实现移动语义。移动语义是一种可以将资源(如内存)从一个对象转移到另一个对象的方式,而不是进行资源的复制。移动操作通常比复制操作更高效,对于大型的对象(如容器、字符串等)可以带来很大的性能优势。
阅读全文
摘要:概述 std::forward是C++11中引入的一个函数模板,用于实现完美转发(Perfect Forwarding)。它的作用是根据传入的参数,决定将参数以左值引用还是右值引用的方式进行转发。 然而,完美转发是为了解决传递参数时的临时对象(右值)被强制转换为左值的问题。在C++03中,可以使用泛
阅读全文
摘要:c++11实用特性[c/c++项目开发必备技能][完整课程请关注公众号:爱编程的大丙]_哔哩哔哩_bilibili
阅读全文
摘要:C++11新标准增加的auto不仅可以自动推断变量类型,还能结合decltype来表示函数的返回值。这些新特性可以让我们写出更简洁、更现代的代码。 在泛型编程中,可能需要通过参数的运算来得到返回值的类型。 我们看一下下面这个例子: #include<iostream> using namespace
阅读全文
摘要:一、强类型介绍 强类型枚举(Strongly-typed enums),号称枚举类型,是C++11中的新语法,用以解决传统C++枚举类型存在的缺陷。 缺点1:传统C++中枚举常量被暴漏在外层作用域中,这样若是同一作用域下有两个不同的枚举类型,但含有相同的枚举常量也是不可的,比如: enum Side
阅读全文
摘要:一、不能使用一个原始地址初始化多个共享智能指针 如下代码 #include "stdafx.h" #include <iostream> #include <windows.h> #include <memory> using namespace std; struct Test { shared_
阅读全文
摘要:弱引用智能指针 std::weak_ptr 可以看做是 shared_ptr 的助手,它不管理 shared_ptr 内部的指针。std::weak_ptr 没有重载操作符 * 和 ->,因为它不共享指针,不能操作资源,所以它的构造不会增加引用计数,析构也不会减少引用计数,它的主要作用就是作为一个旁
阅读全文
摘要:std::unique_ptr 是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针 一、初始化 (1)构造函数初始化: 可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个 unique_ptr 赋值给另一个 unique_ptr。 // 通过构造函数初始化对象 un
阅读全文
摘要:一、获取原始指针 #include "stdafx.h" #include <iostream> #include <windows.h> #include <memory> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { in
阅读全文
摘要:共享智能指针是指多个智能指针可以同时管理同一块有效的内存,共享智能指针 shared_ptr 是一个模板类 一、shared_ptr 的初始化 (1)通过构造函数 std::shared_ptr<T> 智能指针名字(创建堆内存); #include "stdafx.h" #include <iost
阅读全文
摘要:在 C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实
阅读全文
摘要:一、作用 std::bind用来将可调用对象与其参数一起进行绑定。绑定后的结果可以使用std::function进行保存,并延迟调用到任何我们需要的时候。通俗来讲,它主要有两大作用: (1)将可调用对象与其参数一起绑定成一个仿函数。 (2)将多元(参数个数为n,n>1)可调用对象转换为一元或者(n-
阅读全文
摘要:一、为啥使用constexpr 在介绍 gcc/g++ 工作流程的时候说过,C++ 程序从编写完毕到执行分为四个阶段:预处理、 编译、汇编和链接 4 个阶段,得到可执行程序之后就可以运行了。需要额外强调的是,常量表达式和非常量表达式的计算时机不同,非常量表达式只能在程序运行阶段计算出结果,但是常量表
阅读全文
摘要:一、介绍 平时使用'\'去做转译, 在 C++11之后, 出现了原始字面量,定义方式为:R "xxx(原始字符串)xxx",表示括号里的字符串是原始的字符串,不需要做转译。其中()两边的字符串可以省略。当有时,两边必须相同。 二、使用 案例1: #include<iostream> #include
阅读全文
摘要:一、可调用对象包装器: std::function是可调用对象的包装器。它是一个类模板,可以容纳除了类成员(函数)指针之外的所有可调用对象。通过指定它的模板参数,它可以用统一的方式处理函数,函数对象,函数指针,并允许保存和延迟执行它们。 二、基本用法: (1)包装普通函数 #include "std
阅读全文
摘要:为什么需要nullptr? NULL有什么毛病? C++在底层源码中 NULL 这个宏是这样定义的: #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif 也就是说如果源
阅读全文
摘要:1.auto的功能: auto 可以自动推理数据类型。 使用语法如下: #include<iostream> #include<typeinfo> using namespace std; int main() { //auto变量定义时必须初始化 auto x = 3; auto y{23}; /
阅读全文