C++ std::function 在现代 C++ 中,std::function(定义在 <functional> 头文件中)是一个通用的多态函数封装器,能够存储、复制和调用任何可调用对象 。你可以把它理解为一个“能够持有任何可调用对象”的容器。 在 std::function 出现之前,我们无法在一个容器或变量中存储不同类型的“可调用对象”。 普通函数指针只能存函数指针 Lambda 的类型在编译期是唯一的匿名类型 2026-05-19 C++ > 语言特性 > C++11 #C++ #语言特性 #C++11
C++ std::result_of和std::invoke_result 在 C++ 中,有时我们需要获取函数或可调用对象的返回值类型,以便进行后续的操作,在泛型编程中很常用,特别是当不同的参数集的结果类型不同时。 在早期的 C++ 版本中,我们需要手动推导函数返回值类型,这个过程非常复杂,也容易出错。为了解决这个问题,C++11 引入了 std::result_of 和 std::result_of_t(C++14),这两个模板可以方便地获取函数或可调用对象的返回值类 2026-05-18 C++ > 语言特性 > C++17 #C++ #语言特性 #C++11 #C++17
C++ 强制类型转换运算符 将类型名作为强制类型转换运算符的做法是 C 语言的老式做法,C++ 为保持兼容而予以保留。 C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast、reinterpret_cast、const_cast 和 dynamic_cast。 强制类型转换是有一定风险的,有的转换并不一定安全,如把整型数值转换成指针,把基类指针转换成派生类指针,把一种函数指针转换成另一种函 2026-05-17 C++ #C++
C++ decay/decltype/declval 一、decay 在 C++ 14 后,可使用别名 std::decay_t 在 C++ 中,Decay(退化)是指将一种类型转换为另一种更简单、更“原始”的类型的过程。这通常发生在将表达式传递给函数参数或进行模板推导时。 在 C++11 中,标准库提供了 std::decay(定义在 `` 头文件中) ,它精确地实现了上述规则。它是模板元编程中非常重要的工具。 Decay-co 2026-05-17 C++ > 语言特性 > C++11 #C++ #模板 #语言特性 #C++11
C++ SFINAE机制 使用情景: 在 C++11 之前,SFINAE 是实现类型检查的唯一手段。例如,你想编写一个函数,它只接受数字类型,而不接受字符串或自定义类,这时就需要 SFINAE SFINAE(Substitution Failure Is Not An Error) 是 C++ 模板元编程的基石之一,字面意思是:“替换失败并非错误”。 简单来说,当编译器在模板实例化过程中,如果在替换模板参数时发生失败( 2026-05-17 C++ > 模板 #C++ #模板
C++ std::exception C++ 语言本身或者标准库抛出的异常都是 exception 的子类,称为标准异常(Standard Exception)。可以通过下面的语句来捕获所有的标准异常: 12345try{ //可能抛出异常的语句}catch(exception &e){ //处理异常的语句} 一、简介std::exception:标准异常类的基类,其类的声明在头文件 2026-05-16 C++ > 语言特性 > C++11 #C++
VS Code配置Claude Code(通过API方式) 一、前置下载首先在VS Code中下载扩展 Claude Code for VS Code: Claude Code 在 Windows 上依赖 Git Bash,必须先安装 Git。 下载地址: https://git-scm.com/install/windows 二、通过API平台获取API由于没有海外信用卡,无法直接使用 Anthropic 官方 API,可以使用国内中转平台。 在平台上 2026-05-15 工具 > AI #AI
启用或关闭Windows功能里没有Hyper-V选项 今天在弄 WSL2 的时候有如下报错: 123456PS C:\Users\1> wsl --set-default-version 2当前计算机配置不支持 WSL2。请启用“虚拟机平台”可选组件,并确保在 BIOS 中启用虚拟化。通过运行以下命令启用“虚拟机平台”: wsl.exe --install --no-distribution有关信息,请访问 https://aka.ms/ena 2026-05-14 查错记录 #查错记录
C++智能指针 一、什么是智能指针智能指针就是帮我们 C++ 程序员管理动态分配的内存的,它会帮助我们自动释放 new 出来的内存,从而避免内存泄漏。 下面就是一个内存泄露的例子: 1234567891011121314151617181920212223242526272829303132333435363738394041#include <iostream>#include <string 2026-05-13 C++ #C++
C++11新特性(二) 一、nullptr在引入 nullptr 之前,C 和 C++ 使用的都是 NULL,但对于它的定义是不同的: 1234567#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif#endif 根本原因和 C++ 的重载函数有关。C++ 通过搜索匹配参数的机制,试图找到最佳匹配的函数,而如果继 2026-05-11 C++ > 语言特性 > C++11 #C++ #语言特性 #C++11