随笔分类 -  2、std::

摘要:std::function 是 C++11 引入的通用可调用对象包装器, 它可以统一存储、传递和调用各种可调用对象(函数、lambda、成员函数、绑定表达式等),是实现回调、事件系统、函数式编程的核心工具。 1. 包装普通函数 double add(double a, double b) { ret 阅读全文
posted @ 2019-06-25 23:36 osbreak 阅读(311) 评论(0) 推荐(0)
摘要:std::wstring主要用于 UTF-16编码的字符, std::string主要用于存储单字节的字符( ASCII字符集 ),但是也可以用来保存UTF-8编码的字符。 UTF-8和UTF-16是UNICODE字符集的两种不同的字符编码。 std::string ws2s(const std:: 阅读全文
posted @ 2019-06-24 22:54 osbreak 阅读(4447) 评论(0) 推荐(0)
摘要:模板类函数 1.01 std::is_floating_point std::is_floating_point是C++11新增加的类型特征模板之一,它用于判断一个类型是否是浮点类型。它包含在头文件<type_traits>中。 通过在模板函数中使用std::is_floating_point来判断 阅读全文
posted @ 2019-06-24 22:53 osbreak 阅读(810) 评论(0) 推荐(0)
摘要:std::async 是 C++11 提供的高级异步操作接口,用于启动一个异步任务,并自动返回一个 std::future 来获取结果。 #include <future> #include <iostream> int heavy_computation() { std::this_thread: 阅读全文
posted @ 2019-06-24 22:47 osbreak 阅读(166) 评论(0) 推荐(0)
摘要:std::condition_variable 是 C++11 引入的同步原语, 它用于线程间通信,允许一个或多个线程等待某个条件成立,直到另一个线程发出通知。 它是实现生产者-消费者模型、任务队列、事件等待等多线程模式的核心工具。 条件变量本身不存储状态,它只是一个“通知机制”。 它必须与 std 阅读全文
posted @ 2019-06-24 22:42 osbreak 阅读(286) 评论(0) 推荐(0)
摘要:std::this_thread::yield(): 当前线程放弃执行,操作系统调度另一线程继续执行。 区别 std::this_thread::sleep_for(): 表示当前线程休眠一段时间,休眠期间不与其他线程竞争CPU,根据线程需求,等待若干时间。 #include <iostream> 阅读全文
posted @ 2019-06-24 22:34 osbreak 阅读(2141) 评论(0) 推荐(0)
摘要:std::optional 是 C++17 引入的一个容器类模板,用于表示一个值可能存在,也可能不存在。 它提供了一种类型安全的方式来处理“可空值”(nullable value),避免使用 nullptr、特殊值(如 -1)或 bool、value 的笨拙方式。 std::optional<T> 阅读全文
posted @ 2019-06-24 16:04 osbreak 阅读(1244) 评论(0) 推荐(0)
摘要:#include <initializer_list> template <class T> class initializer_list; initializer_list对象中的元素永远是常量值const T,不能对initializer_list对象中元素的值修改 使用场景 1、可以使用初始化 阅读全文
posted @ 2019-06-24 15:13 osbreak 阅读(599) 评论(0) 推荐(0)
摘要:std::decltype decltype ( 实体 ) decltype ( 表达式 ) 若实参是其他类型为 T 的任何表达式,且 a) 若 表达式 的值类别为亡值,则 decltype 产生 T&&; b) 若 表达式 的值类别为左值,则 decltype 产生 T&; c) 若 表达式 的值 阅读全文
posted @ 2019-06-24 14:53 osbreak 阅读(1617) 评论(0) 推荐(1)
摘要:auto 1.0 定义变量时,必须初始化 auto a = 10; // 正确 auto b; // 错误 1.1 不能用于函数参数 void func(auto a = 1); // 错误 1.2 不能用于函数参数 struct Foo { auto var1_ = 0; // error: au 阅读全文
posted @ 2019-06-24 14:52 osbreak 阅读(280) 评论(0) 推荐(0)
摘要:C++11中新增了<mutex>,Mutex互斥量, 它是C++标准程序库中的一个头文件。 std::mutex不支持copy和move操作,最初的std::mutex对象是处于unlocked状态。 Mutex 系列类(四种) std::mutex,最基本的 Mutex 类。 std::recur 阅读全文
posted @ 2018-12-09 19:06 osbreak 阅读(1224) 评论(0) 推荐(0)
摘要:#include<thread> 头文件 std::thread为C++11的线程类,使用方法和boost接口一样,非常方便。 C++11的std::thread解决了boost::thread中构成参数限制的问题。 获得主线程ID: std::this_thread::get_id() 获得线程I 阅读全文
posted @ 2018-12-08 14:32 osbreak 阅读(243) 评论(0) 推荐(0)
摘要:std::bind bind函数看作是一个通用的函数适配器。 它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。 void fun(int x, int y, int z) { cout<< x <<" "<< y <<" "<< z <<endl; } 01 绑定参数 aut 阅读全文
posted @ 2018-12-06 23:52 osbreak 阅读(313) 评论(0) 推荐(0)
摘要:函数指针 函数返回值类型 (* 指针变量名) (参数列表) int (*p) (int, int) 指针函数 *类型标识符 函数名 (参数表) int *p (int, int) 区分方法 1. 函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。 2.()的优先级比 阅读全文
posted @ 2018-12-06 23:17 osbreak 阅读(337) 评论(0) 推荐(0)
摘要:C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。 C++11中,官方似乎一直鼓励大家用lambda表达式,而不是函数对象,lambda表达式更易于使用和理解。 lambda表达式的语法如下: [capture_block](parameters) exceptions 阅读全文
posted @ 2018-06-22 11:20 osbreak 阅读(337) 评论(0) 推荐(0)
摘要:1. std::shared_ptr: 一个共享所有权的智能指针, 多个 shared_ptr 可以共享同一个对象。 C++11 引入的智能指针之一,属于内存管理机制的核心工具。它通过引用计数(Reference Counting)实现对动态分配对象的自动内存管理,避免内存泄漏。 线程安全: sha 阅读全文
posted @ 2018-06-21 15:01 osbreak 阅读(943) 评论(0) 推荐(0)
摘要:c++ 11特性 1.01 关键字 auto : 自动存储变量的关键字, 必须要对auto声明的类型进行初始化,否则编译器无法推导出auto的实际类型。 decltype : 根据表达式的实际类型推演出定义变量时所用的类型。如cout << typeid(i).name() << endl; fin 阅读全文
posted @ 2018-06-21 14:07 osbreak 阅读(251) 评论(0) 推荐(0)