随笔分类 -  C/C++

摘要:CharReaderBuilder 默认的设置: void CharReaderBuilder::setDefaults(Json::Value* settings) { (*settings)["collectComments"] = true; // 解析和序列化的时候是否保留注释 (*sett 阅读全文
posted @ 2021-01-20 13:36 HachikoT 阅读(336) 评论(0) 推荐(0) 编辑
摘要:ISO C标准支持的信号 信号名称 含义 默认行为 SIGABRT 异常终止信号,一般通过调用abort函数产生 terminate+core SIGINT 中断信号,一般通过键盘输入ctrl+c产生 terminate SIGSEGV 段错误信号,一般通过访问非法地址产生 terminate+co 阅读全文
posted @ 2021-01-02 11:58 HachikoT 阅读(408) 评论(0) 推荐(0) 编辑
摘要:目录结构 . |-- cmake | |-- CompilerSettings.cmake | |-- Options.cmake | |-- ProjectBoost.cmake | `-- UseOpenSSL.cmake |-- CMakeLists.txt |-- hello-cpp | | 阅读全文
posted @ 2020-12-21 21:24 HachikoT 阅读(881) 评论(0) 推荐(0) 编辑
摘要:启动gdb 可以通过gdb -q命令启动gdb(-q会忽略启动时的提示信息)。 可以在gdb中查看当前的工作目录: (gdb) pwd gdb中也可以自由切换工作目录: (gdb) cd workspace/cpp-study/hello-cpp/ 加载要调试的可执行文件: (gdb) file b 阅读全文
posted @ 2020-12-20 22:35 HachikoT 阅读(140) 评论(0) 推荐(0) 编辑
摘要:内存对齐 许多计算机系统对基本类型的合法地址做出了限制,要求某种类型的对象的地址必须是K(通常是2,4,8)的倍数。这被称为内存对齐。 为什么要有内存对齐? 提升内存读写性能,比如对于double对象,如果按8字节对齐,那么64位机器一次行就可以完成读写。 硬件强制要求,一般系统不进行内存对齐也可以 阅读全文
posted @ 2020-12-14 22:49 HachikoT 阅读(141) 评论(0) 推荐(0) 编辑
摘要:拷贝还是移动 之前在网上看到说在C++11中,STL容器是支持移动语义的,STL容器有些操作需要保证强异常安全会要求要么用拷贝操作要么用无异常的移动操作。这里找了一下相关的源码如下,发现确实是这样的: template<typename _InputIterator, typename _Forwa 阅读全文
posted @ 2020-12-11 18:15 HachikoT 阅读(529) 评论(0) 推荐(0) 编辑
摘要:求二进制整型中1的个数 n & (n - 1) 会使n的二进制中最后一位1变成0,利用这一点计数,直到把n所有的1都变为0。 int numOfOnes(int n) { int cnt = 0; while (n) { cnt++; n &= n - 1; } return cnt; } 判断一个 阅读全文
posted @ 2020-12-09 21:32 HachikoT 阅读(96) 评论(0) 推荐(0) 编辑
摘要:C++ 线程池 基于C++11语法实现的简易线程池: /** * 线程池(C++简单实现) * @file: ThreadPool.h * @author: rancheng <rc4work@163.com> * @date: 2020-11-23 */ #pragma once #include 阅读全文
posted @ 2020-11-23 20:57 HachikoT 阅读(522) 评论(0) 推荐(0) 编辑
摘要:定义函数指针类型 using用来定义类型别名是C++11引入的新语法,相比于typedef使用起来更优雅,尤其是函数指针这块,下面是对比: // 普通函数 typedef void (*FP) (int, const std::string&); using FP = void (*) (int, 阅读全文
posted @ 2020-11-19 11:41 HachikoT 阅读(213) 评论(0) 推荐(0) 编辑
摘要:typename和class 在模板类的声明中,我们有两种方式: template <class T> template <typename T> 在这里,class和typename是相同的。但是当你需要使用模板类中定义的内部类型的时候,那么就必须使用typename: template <cla 阅读全文
posted @ 2020-11-19 11:23 HachikoT 阅读(341) 评论(0) 推荐(0) 编辑
摘要:noexcept函数抛出异常 原本设计函数的时候明确该函数不会抛出异常,所以给函数加上了noexcept属性,但修改代码之后需要抛出异常,比如: void func() noexcept { ... throw except(); } 即使像这种很明显的语法矛盾,有的编译器的版本并不会发出警告,于是 阅读全文
posted @ 2020-11-19 09:17 HachikoT 阅读(117) 评论(0) 推荐(0) 编辑
摘要:data和c_str data()和c_str()都是用来获取底层字符串的首地址的,但是在C98中规定的是data()返回的字符串不保证有结尾\0,但是c_str()返回的字符串保证有结尾\0,也就是C98标准在设计字符串的时候是想抛弃C风格的字符串语法的,但是在实际应用中,往往需要将C++的str 阅读全文
posted @ 2020-11-11 19:26 HachikoT 阅读(6768) 评论(0) 推荐(2) 编辑
摘要:libmicrohttpd libmicrohttpd 是 GUN 下开源的一个小型的 HTTP 库,能够方便的嵌入到系统中。 安装步骤 --disable-messages是关闭MHD的错误日志功能,MHD的错误日志是直接输出到屏幕的 --enable-https开启https支持需要依赖库gnu 阅读全文
posted @ 2020-11-09 13:41 HachikoT 阅读(1433) 评论(0) 推荐(0) 编辑
摘要:目录结构 . |-- cmake | |-- CompilerSettings.cmake | |-- Options.cmake | |-- ProjectBoost.cmake | `-- UseOpenSSL.cmake |-- CMakeLists.txt `-- hello-cpp |-- 阅读全文
posted @ 2020-11-07 15:06 HachikoT 阅读(1387) 评论(0) 推荐(0) 编辑
摘要:algorithm boost中将一些小的算法集中到该库,主要是一些字符串处理算法,字符串的方法需引入#include <boost/algorithm/string.hpp> 大小写转换 小写跟大写一样,就不写了: template<typename WritableRangeT> inline 阅读全文
posted @ 2020-11-06 16:45 HachikoT 阅读(201) 评论(0) 推荐(0) 编辑
摘要:Base64 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法 代码实现(C++) /* base64.cpp and base64.h base64 encoding and decoding with C++. Mo 阅读全文
posted @ 2020-10-20 15:23 HachikoT 阅读(140) 评论(0) 推荐(0) 编辑
摘要:CountDownLatch 用于等待其它线程都处于就绪状态: #include <mutex> #include <condition_variable> class CountDownLatch { public: CountDownLatch(uint32_t count) : m_count 阅读全文
posted @ 2020-10-16 22:50 HachikoT 阅读(1002) 评论(0) 推荐(0) 编辑
摘要:ConcurrentQueue 用C++11提供的多线程类实现一个线程安全的队列: #include <queue> #include <mutex> #include <condition_variable> #include <utility> template<typename T, type 阅读全文
posted @ 2020-10-16 21:10 HachikoT 阅读(1699) 评论(0) 推荐(0) 编辑
摘要:split C++标准库中没有提供split分隔字符串的函数,哎。 实现一 下面的实现需要指定分隔符的集合delimiters,以及是否将连续的分隔符看作同一个分隔compress : enum class TokenCompress { On, Off }; /** * 分隔字符串 * @para 阅读全文
posted @ 2020-10-15 21:57 HachikoT 阅读(331) 评论(0) 推荐(0) 编辑
摘要:asio asio是C的准标准网络库,并且C20标准库的网络部分将基于ASIO,需引入头文件#include <boost/asio.hpp>。 ip地址 boost定义了表示ip地址的类型,支持ipv4和ipv6,提供ip::address和ip::address_v4以及ip::address_ 阅读全文
posted @ 2020-10-11 00:02 HachikoT 阅读(913) 评论(0) 推荐(0) 编辑