C++11新特性
文章平均质量分 62
伐尘
这个作者很懒,什么都没留下…
展开
-
【C++17】nodiscard介绍
值得注意的是,当函数返回class的引用或指针时,nodiscard无效。nodiscard一般用于标记函数的返回值或者某个类,保存函数返回值,或者使用cast to void。引入的一种标记符,其语法一般为。转载 2024-06-05 10:36:07 · 104 阅读 · 0 评论 -
【C++11】c++ - libc++abi.dylib:以 std::__1::system_error 类型的未捕获异常终止:互斥锁失败:参数无效
这个崩溃 是可以追踪的 每次都崩溃在。原创 2024-03-19 18:07:01 · 279 阅读 · 0 评论 -
【C++】shared_ptr(作为局部变量返回)
1. 一个局部的shared_ptr 作为返回值过程:当shared_ptr 被创建的时候,自身的引用计数 +1,当前引用计数为 1 , 按值返回以后 引用计数 + 1 (拷贝构造函数,就是可以理解为基础类型的拷贝),当前引用计数为 2 ,函数执行完成之后,申请的shared_ptr析构(销毁变量),引用计数 -1 ,此时复制出来的shared_ptr 引用计数变为 1;4. 当shared_ptr 按引用作为参数传递时,自身不会进行引用 + 1 计数,引用以后的自身计数还是引用之前的计数;原创 2023-03-18 15:32:57 · 816 阅读 · 0 评论 -
【C++14】C++(14):[[deprecated]]
【代码】【C++14】C++(14):[[deprecated]]转载 2022-11-01 16:02:50 · 211 阅读 · 0 评论 -
【C++ 11】c++智能指针转化:static_pointer_cast、dynamic_pointer_cast、const_pointer_cast、reinterpret_pointer_ca
如果需要进行类层次上的上下行转换时,可以使用std::static_pointer_cast()、std::dynamic_pointer_cast、std::const_pointer_cast()和std::reinterpret_pointer_cast()。它们的功能和std::static_cast()、std::dynamic_cast、std::const_cast()和std::reinterpret_cast()类似。,只是dynamic_cast在进行下行转换的时候(即基类到派生类)转载 2022-08-25 11:29:43 · 3271 阅读 · 0 评论 -
【C++11】右值引用(概念,使用场景),移动拷贝构造函数,赋值拷贝构造函数。
详述 C++ 右值引用转载 2022-08-23 16:13:02 · 1801 阅读 · 0 评论 -
【C++11】std::bad_weak_ptr的原因
【C++11】std::bad_weak_ptr的原因一、概述前几天解了一个bug,表象是调用shared_from_this的时候就跑出bad_weak_ptr异常,类A明明是继承自boost::enable_shared_from_this<A>的,一时搞不明白为什么,后来搜了下出现“bad_weak_ptr异常”可能的原因才找到问题所在:创建类A的对象的时候没有用智能指针包裹,而是直接new的裸指针。二、引申enable_from_this 的使用与实现原理说明:shared_f原创 2022-05-19 16:03:41 · 2649 阅读 · 0 评论 -
【C++11】C++/C++11中std::runtime_error的使用
【C++11】std::runtime_error的使用一、概要std::runtime_error:运行时错误异常类,只有在运行时才能检测到的错误,继承于std::exception,它的声明在头文件中。std::runtime_error也用作几个运行时错误异常的基类,包括std::range_error(生成的结果超出了有意义的值域范围)、overflow_error(上溢)、underflow_error(下溢)、system_error(系统错误)。std::runtime_error类没有转载 2022-05-17 16:01:36 · 4722 阅读 · 0 评论 -
【C++11】C++11 std::function, std::bind, std::ref, std::cref
【C++11】C++11 std::function, std::bind, std::ref, std::crefstd::function看看这段代码先来看看下面这两行代码:std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed;std::function<void(EventKeyboard::KeyCode, Event*)> onKeyReleased;这两行代码是从Cocos2d-x中转载 2022-05-06 01:23:27 · 191 阅读 · 0 评论 -
【C++11】c++11 异常处理
【C++11】c++11 异常处理概要异常是程序执行期产生问题,比如尝试除以零的操作。异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw:throw: 当问题出现,程序通过throw抛出一个异常;catch: 在你想要处理问题的地方,通过异常处理程序捕获异常;try: try 块中的代码标识将被激活的特定异常。它后面允许跟着一个或多个 catch 块;使用 try/catch 语句的语法:try { // 保护代码原创 2022-05-05 00:06:06 · 896 阅读 · 0 评论 -
【C++11】【多线程与并发】std::future和std::promise
【C++11】【多线程与并发】std::future和std::promisestd::futurestd::future期待一个返回,从一个异步调用的角度来说,future更像是执行函数的返回值,C++标准库使用std::future为一次性事件建模,如果一个事件需要等待特定的一次性事件,那么这线程可以获取一个future对象来代表这个事件。异步调用往往不知道何时返回,但是如果异步调用的过程需要同步,或者说后一个异步调用需要使用前一个异步调用的结果。这个时候就要用到future。线程可以周期性的在原创 2022-05-04 19:50:01 · 957 阅读 · 0 评论 -
【C++11】std::future和std::shared_future区别
【C++11】std::future和std::shared_future区别std::future使用可以处理所有在线程间数据转移的必要同步,但是std::future模型独享同步结果的所有权。并且通过 get() 函数,一次性的获取数据,让并发访问变的毫无意义。你的并发代码没有办法让多个线程等待同一个事件。std::shared_futurestd::shared_future 可以完成让多个线程的等待std::promise<std::string> p;std::shared转载 2022-04-26 10:52:58 · 372 阅读 · 0 评论 -
【C++11】C++并发编程
【C++11】C++并发编程前言首先需要说明,本博客的主要内容参考自Forhappy && Haippy博主的分享,本人主要是参照博主的资料进行了学习和总结,并适当的衍生或补充了相关的其他知识内容。C++11有了std::thread 以后,可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高。C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是,和。:该头文主要声明了两个类, std::atomic 和 std::atomic_flag转载 2022-04-26 10:00:02 · 1133 阅读 · 0 评论 -
【C++11】static_assert 与assert区别
【C++11】static_assert 与assert区别背景assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。assert分为动态断言和静态断言2种。c++11引入了static_assert关键字,用来实现编译期间的断言,叫静态断言。static_assert优势:静态断言在编译时进行处理,不会产生任何运行时刻空间和时间上的开销,这就使得它比assert宏具有更好的效率。另外比较重原创 2022-04-25 11:25:09 · 320 阅读 · 0 评论 -
[C++11] 多线程的参考资料
[C++11] 多线程的详解一、参考链接b站视频链接C++多线程笔记C++ 11 并发与多线程二、多线程笔记第一节 并发基本概念及实现、进程、线程基本概念(1)并发、进程、线程基本概念和综述并发两个及以上的任务(独立活动)同时进行(发生);(一个程序同时执行多个独立任务)单核cpu,某时刻只可以执行一个任务,由操作系统调度,每秒进行多次“任务切换”,形成多任务同时进行(并发)的错觉。(又称为上下文切换,需要保存任务的上下文,有时间开销)多核cpu,能够实现真正的并发(目的是为了提高原创 2022-03-28 14:29:39 · 542 阅读 · 0 评论 -
C++11 单例模式 std::call_once实现
C++11 单例模式 std::call_once实现class Singleton {public: static Singleton* getInstance() { static std::once_flag onceFlag; // 必须是静态的 std::call_once(onceFlag, [&] {m_instance = new Singleton(); }); // 只会调用一次 return m_instance; } private: Singlet转载 2022-03-25 20:05:49 · 1018 阅读 · 0 评论 -
C++11 tuple 的使用
C++11 tuple 的使用本文讨论的是在C++ 11标准下使用tuple,而不是python语言。说到tuple,肯定会第一时间想到python语言,但tuple也不仅仅只在python中有,在C#,C++等语言中都有这样的数据结构。在C++中的tuple和python语言中是类似的,是一个强大的允许存放多个不同类型数据的容器,是对pair的泛化。要在C++中使用tuple,首先需要引用头文件tuple及名空间std。tuple相关的一共有4个函数,分别介绍make_tuple: 用于创建tu转载 2022-03-25 16:32:04 · 2765 阅读 · 0 评论 -
C++ 11 std::enable_shared_from_this
C++11 std::enable_shared_from_this一 介绍1 申明std::enable_shared_from_thistemplate< class T > class enable_shared_from_this;(C++11 起)std::enable_shared_from_this 能让其一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例(假设名为 pt1转载 2022-03-25 10:46:49 · 318 阅读 · 0 评论 -
C++11:string和wstring之间互转换
C++11:string和wstring之间互转换今天打算做string到wstring转换时发现以前早已经写过,已经忘记从哪里找来的了,贴出代码,以防再忘记。C++11后UTF8编码转换还真是方便#include <string>#include <locale>#include <codecvt> // convert string to wstring inline std::wstring to_wide_string(const std::stri原创 2022-03-12 09:35:38 · 1326 阅读 · 2 评论 -
enum 与 enum class 的区别
enum 与 enum class 的区别enum class 是C++11之后出来的新特性,然而使用的人不多。enum 在这之后称为不限定范围的枚举,enum class称之为限定范围的枚举。就这范围的事情使用方式就大相径庭。文件目录防止污染空间可以前置声明需要强制转换一、防止污染空间enum MyEnum{ ME_FIRST, ME_SECOND}enum MyEnum2{ ME_FIRST, ///错误 , 不限定范围的enum不允许这么做}原创 2021-12-01 15:09:45 · 9391 阅读 · 0 评论