主页

C++的asio库的下载编译

概述 Asio是一个跨平台的C++库,用于网络和低级I / O编程 为开发人员提供一致的异步模型,使用现代 C++方法。 当针对C ++ 11(或更高版本)时,大多数asio都可以在没有任何额外依赖项的情况下使用。独立版的asio是header-only,所以使用时只需包含头文件即可。把解压得到的include目录(包含asio.hpp)放到项目目录里。 相关链接 Asio官网 独立版使用说明 boost版使用说明 下载 下载地址1 我这里选择的是1_24_0版本,下载之后解压。 编译 编译环境 Windows gcc version 7.3.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 projec...

阅读更多

C++的关键字

C++关键字 类关键字 class 声明类 声明有作用域枚举类型(C++11 起) 在模板声明中,class 可用于引入类型模板形参与模板模板形参 若作用域中存在具有与某个类类型的名字相同的名字的函数或变量,则 class 可附于类名之前以消歧义,这产生一个详述类型说明符 struct 复合类型的声明 有作用域枚举类型的声明(C++11 起) 若存在于作用域中的某个函数或变量所拥有的名字,与某个非联合体类类型的名字相同,则可在其名字之前加上 struct 来消歧义,这产生一个详述类型说明符 union 联合体类型的声明 若存在于作用域中的某个函数或变量所拥有的名字与某个联合体类型的名字相同,则可在该名字之前加上 union 以...

阅读更多

C++中的lambda表达式

lambda表达式 lambda介绍 到目前为止,我们使用过的两种可调用对象有 函数 和 函数指针, 还有其它两种可调用对象:重载了调用运算符的类, 还有lambda表达式 一个lambda表达式表示一个可调用的代码单元。可理解为一个未命名的内联函数。与函数类似,一个lambda具有一个返回类型、一个参数列表和一个函数体。lambda与函数不同的地方在于,lambda可以定义在函数内部。 形式: [capture list] (parameter list) -> return type { function body} 其中,capture list(捕获列表)是lambda表达式所在函数定义的局部变量列表(通常为空) return type 、parameter l...

阅读更多

C++11新特性之智能指针

动态内存与智能指针 动态内存 在C++中,动态内存的管理是通过一对运算符来完成的: new, 在动态内存中为对象分配空间并返回一个指向该对象的指针,也可以选择对对象进行初始化 delete, 接受一个动态对象的指针,销毁该对象,并释放与之关联的内存 智能指针 为了更容易,也更安全的使用动态内存,新的标准库提供了两种智能指针类型来管理动态对象。智能指针的行为类似于常规指针,区别在于它负责自动释放所指向的对象。 含义 shared_ptr 允许多个指针指向同一个对象 unique_ptr 只能”独占”所指向的对象 初始化 智能指针也是一个模板。所以,创建智能指针时,必须提供指针类型,与vector一样,在尖括号内给出类型。 shared...

阅读更多

C++11新特性之互斥锁包装器

lock_guard管理类 #include <mutex> template< class Mutex > class lock_guard; 类 lock_guard 是互斥体包装器,为在作用域块期间占有互斥提供便利 RAII 风格机制。 创建 lock_guard 对象时,它试图接收给定互斥的所有权。控制离开创建 lock_guard 对象的作用域时,销毁 lock_guard 并释放互斥。 lock_guard 类不可复制。 模板形参 Mutex - 要锁定的互斥。 成员类型 成员类型 定义 mutex_type Mutex ...

阅读更多

C++11新特性之thread线程

概述 #include <thread> class std::thread; std::thread 是C++11 新增的线程支持库的线程类,类 thread 表示单个执行线程。线程允许多个函数同时执行。 线程在构造关联的线程对象时立即开始执行(等待任何OS调度延迟),从提供给作为构造函数参数的顶层函数开始。顶层函数的返回值将被忽略,而且若它以抛异常终止,则调用 std::terminate 。顶层函数可以通过 std::promise 或通过修改共享变量(可能需要同步,见 std::mutex 与 std::atomic )将其返回值或异常传递给调用方。 成员类型 成员类型 : native_handle_type 成员类 class thread::i...

阅读更多

C++11新特性之recursive_mutex互斥锁

概述 #include <mutex> class std::recursive_mutex; recursive_mutex 类是同步原语,能用于保护共享数据免受从个多线程同时访问。 recursive_mutex 提供排他性递归所有权语义: 调用方线程在从它成功调用 lock 或 try_lock 开始的时期里占有 recursive_mutex 。此时期间,线程可以进行对 lock 或 try_lock 的附加调用。所有权的时期在线程调用 unlock 匹配次数时结束。 线程占有 recursive_mutex 时,若其他所有线程试图要求 recursive_mutex 的所有权,则它们将阻塞(对于调用 lock )或收到 false 返回值(对于...

阅读更多

C++11新特性之mutex互斥锁

概述 #include <mutex> class std::mutex; mutex 提供排他性非递归所有权语义: 调用方线程从它成功调用 lock 或 try_lock 开始,到它调用 unlock 为止占有 mutex 。 线程占有 mutex 时,所有其他线程若试图要求 mutex 的所有权,则将阻塞(对于 lock 的调用)或收到 false 返回值(对于 try_lock ). 调用方线程在调用 lock 或 try_lock 前必须不占有 mutex 。 若 mutex 在仍为任何线程所占有时即被销毁,或在占有 mutex 时线程终止,则行为未定义。 std::mutex 既不可复制亦不可移动。 成员类型 成员类型 : nativ...

阅读更多