Cpp std::format 学习笔记
已经2024年了,C++20标准正式收编fmtlib得到的格式化方案std::format已经被三大编译器支持得很好了, 虽然部分特性在后续的标准中仍然在改进,但是值得好好学习整理一下了。 std::format在形式上和Python的字符串格式化非常类似,对用户很友好。当然由于Python自身是动态的,f-string可以玩得花样更多,写起来更方便,这是C++无论如何也比不了的。 简单示例 从HelloWorld开始 12345678#include <format>#include <iostream>int main() { std::string str = std::format("Hello, {}!", "World"); std::cout << str << '\n'; return...
Cpp VSCode 配置
记录一下VSCode配置C++的内容吧。 插件列表 首先列一下目前在VSCode上使用的,涉及到C++的核心插件: C/C++ (Microsoft):微软官方默认的C/C++插件,禁用了代码提示,但是调试这些还需要用它,不能完全禁用 clangd (LLVM):LLVM官方提供的,当前代码提示的主力插件 CMake Tools (Microsoft):微软官方提供的CMake支持,提供CMake命令工具条和快捷指令,以及CMake语法高亮 CodeLLDB (Vadim Chugunov):lldb调试支持,非官方支持 还有两个不太重要的插件: C/C++ Themes (Microsoft) Better C++ Syntax (Jeff Hykin) 补充:通过clangd (LLVM) 插件安装的clangd虽然是最新版本,但是代码修正功能可能有问题,还是直接使用系统中的clangd更加可靠。 C/C++ 插件和 clangd...
Cpp 编译环境笔记
整理一下关于C++编译器的笔记,这部分由于不是科班出身,没学过编译原理之类的课程,细节总是搞不懂, 本文只是基于网络搜集到的各种零散的描述进行整理,不保证正确性!!! 在本文中只关注x64平台,Windows或Linux(Ubuntu)系统的C/C++编译环境,并且不考虑交叉编译等问题。 除了系统原生的MSVC和GCC,重点关注两个概念: MinGW,MinGW-W64,MSYS... LLVM,clang 将它们并列是不合适的,因为它们不是一个层面上的东西,但是这两个确实是我在理解C++编译环境配置时遇到的最大困难。 基本概念 c 语言的标准分成两部分: 语法,指导我们应该怎么编程,在源文件中必须满足某些规则 标准库(头文件),相对于系统层面向 c 语言程序提供的一些基础接口,例如printf等,但语法标准只是规定了接口的形式,并没有具体的实现 对 c 语言的支持,也分成两个部分: c...
GoogleTest + CTest 配置与使用
现在我们关注CMake项目中的测试部分,具体包括GoogleTest和CTest的使用。 概述 Google Test(简称为 gtest)是 Google 开发的一个开源的 C++ 测试框架,用于编写和运行单元测试、集成测试和功能测试。主要特点包括: 支持各种平台和编译器,包括 Linux、Windows 和 macOS,并且与主流的 C++ 编译器兼容。 提供了丰富的断言宏,如 EXPECT_EQ、ASSERT_TRUE 等,用于验证代码行为是否符合预期。 支持参数化测试,允许以不同的参数运行同一个测试用例。 可以生成详细的测试报告,包括测试通过的数量、失败的数量、失败的原因等信息。 可以扩展测试框架,编写自定义的测试扩展和断言宏。 CTest 是 CMake 附带的一个测试工具,用于管理和执行项目中的测试。它是一个命令行工具,可以通过简单的命令来执行测试,并生成测试报告。主要特点包括: 可以在构建系统中自动发现项目中的测试,并执行它们。 支持各种测试框架,包括 Google Test、Catch、Boost.Test...
CUDA学习笔记——基本概念与CUDA下载
显卡 显卡(Graphics card),全称显示接口卡,又称显示适配器,是计算机的重要硬件组件之一,负责图形处理和显示输出。显卡通常由 GPU(图形处理器)、显存、供电模块等部分组成。类似的扩展设备还有网卡、声卡等。显卡的主要功能是将计算机内部处理的数字信号转换为显示器可识别的图像信号,从而驱动屏幕显示内容。 早期显卡多集成在主板上,仅承担基础的视频输出功能,并不负责复杂的图形计算。随着技术发展,出现了独立显卡和集成显卡的区分: 集成显卡:集成在 CPU 或主板芯片组中,依赖系统内存(RAM)作为显存,无法单独更换。适用于轻量办公和日常使用。 独立显卡:作为独立硬件插入主板的...
WSL2 安装记录
首先注意WSL1 和 WSL2 是不同的产品: WSL1 是在Windows之上加了一个转换层,用来支持基本的Linux环境; WSL2 则是更完整的虚拟化,包括一个定制的Linux内核,支持更完整的Linux使用。 虽然WSL2在某些情境下因为虚拟化程度更高而导致效率比WSL1更低,例如跨系统的文件读写,但是这相比与WSL2的巨大优势可以忽略不计,目前只推荐安装和使用WSL2。 需要注意的是,虽然都是基于虚拟化技术,WSL2和普通的虚拟机还是有很多不同之处: 虚拟机是完全隔离在一个沙盒中,操作很难影响到外层的实体机,除非使用虚拟机软件提供的共享目录等,因此操作更加安全。 WSL2则更像一种“共生”关系,Windows的硬盘也被自动挂载在WSL2的目录下,因此rm -rf...
Hexo 博客部署与重建记录
我已经记不得这是第几次重建博客了,虽然基于git仓库的备份,所有的md文件都还在,但是node_modules以及其他的环境配置会因为各种各样的原因损坏(换电脑,系统重装,迁移系统等),有必要重新梳理一下博客搭建的过程。 下面的内容主要是在Windows上和linux(WSL2)上的本地部署,以及在云服务器和Github Page的远程部署,并不涉及具体的Hexo主题以及配置细节。 生成与部署逻辑 Hexo是一个基于NodeJS的静态博客框架。首先梳理一下主要的工作逻辑: 在本地博客文件夹中,下载必要的Hexo组件并配置 在source/_posts目录中添加博客文件(markdown格式) 生成并推送 执行hexo generate生成相应的静态网页,生成的静态网页及相关资源都会存放在public/目录下 执行hexo deploy部署到远程仓库,实质上是将public/目录下的所有内容打包复制到一个git本地仓库,然后提交到指定的远程仓库 本地预览:执行hexo...