C++ – 跨平台在Windows、Linux系统上获取当前可执行程序路径
1 C++跨平台在Windows、Linux系统上获取当前可执行程序路径 跨平台获取当前可执行程序路径是C++跨平台项目中会经常使用的功能,我将这个功能简单的封装成了一个PathUtils工具类,在该类中通过GetCurrentProgramDirectory静态函数获取当前可执行程序路径,下面贴出…
- C++
- 2023-09-07
CMake – 链接多线程pthread库的几种方式
经常需要在项目中使用到标准库的多线程std::thread,这些项目在Linux上跨平台编译时需要链接pthread库才可以正确的编译和运行。而CMake中链接pthread又有比较多的方式,本文就简单的归纳下CMake中链接pthread的各种方式的写法。 1 第一种方式 直接在target_li…
- C++
- 2023-09-06
GCC – 常用手动链接选项-lz、-lrt、-lm、-lc、-lpthread、-lcrypt、dl链接都是什么库?
1 GCC的-l选项,手动添加链接库 GCC在编译代码时,可以使用-l手动添加链接库,比如说有以下代码main.c #include <stdio.h> #include <math.h> #define PI 3.14159265 int main () { double …
- C++
- 2023-09-06
GCC – -fpic、-fPIC、-fpie、-fPIE编译选项的作用和区别
本文主要对gcc和cmake经常使用的编译选项-fpic、-fPIC、-fpie、-fPIE的作用和区别进行总结。 1 -fpic 官方文档说明 Generate position-independent code (PIC) suitable for use in a shared library…
- C++
- 2023-09-06
CMake – 指定gcc、g++编译器
1 CMake指定gcc/g++编译器 Centos7默认的gcc和g++版本是4.8.5,这个版本对C++11的特性支持的不是很完全,所以一般都建议使用高版本的gcc和g++。 假设: 高版本的gcc的路径为:/opt/rh/devtoolset-10/root/bin/gcc 高版本的g++的路…
- C++
- 2023-09-02
C++ – GCC版本与C++标准之间的对应关系
1 GCC版本与C++标准的对应关系 C++到今年为止已经有了C++98、C++11、C++14、C++17、C++20,而C++23也于今年发布,而C++26也预计在2026年发布。目前在项目中一般是C++11作为标准,当然也有时会用到C++14和C++17的一些特性。 GCC是支持多种编程语言的…
- C++
- 2023-09-01
C++ – Windows系统使用C++切换音频默认输出设备
1 Windows系统上切换默认音频输出设备 如果电脑上插了多个音频输出设备(比如同时插了音响和耳机),在Windows系统中一般通过在声音设备页面选择输出设备,通过这种方式切换音频的默认输出设备。 也可以在高级声音选项 - 应用音量和设备首选项单独为某个软件设置音频输入设备和音频输出设备。 2 使…
- C++
- 2023-08-30
C++ – 日志库easylogging++初始化时不生成默认日志文件mylog.txt
1 easylogging++日志会默认生成日志文件mylog.txt 在使用C++日志库easylogging++的过程中,既使我们在日志配置中已经进行了日志文件路径和文件名格式的指定,但是只要通过以下类似代码初始化了easylogging++, #include "easylogging++.h…
- C++
- 2023-08-28
C++ – 单例模式
转载自:Zhongtian‘s Technical Notes,如侵联删。 单例模式是使用最广泛的设计模式之一,其目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点。 1 Eager Singleton class Singleton { public: static Singleton&a…
- C++
- 2023-08-25
C++ – std::vector初始化方式总结
本文将简单总结下std::vector初始化的几种方式。 1 std::vector初始化 1.1 使用值初始化std::vector #include<iostream> #include <vector> int main() { std::vector<int&g…
- C++
- 2023-08-21
C++ – websocket++不依赖boost,基于独立Asio编译方法
1 websocket++ WebSocket++ 是一个跨平台开源(BSD 许可证)仅标头 C++ 库,它实现RFC6455(WebSocket 协议)和RFC7692(WebSocket 压缩扩展),可基于WebSocket++编写Websocket客户端和服务器,其中Websocket++网络…
- C++
- 2023-08-18
C++ – const_cast, static_cast, dynamic_cast, reinterpret_cast四种cast转换的区别和使用
在C++中有四种形式的cast:const_cast、static_cast、dynamic_cast、reinterpret_cast。本篇文章将介绍什么时候和怎么样去使用这四种不同的cast。 1 const_cast const_cast用于将一个const常量转换为变量,或者将一个变量转为c…
- C++
- 2023-08-17