面向想要系统掌握 “函数在 C++ 里到底能怎么定义、怎么声明、怎么组合各种限定符/模板/捕获/推断/修饰” 的学习者。本总结基于 C++20/C++23 主流特性,必要时标注版本差异;旧标准兼容点也会提及。示例代码力求最小可读。



0. 前置概念:声明 vs 定义、可调用对象、类型推断

int add(int, int); // 声明
int add(int a, int b) { return a + b; } // 定义

同一翻译单元(translation unit)内同名同签名函数只能定义一次(ODR)。多个 TU 可重复声明,且最终链接时需要且只能有一个定义(inline 例外,见后文)。

可调用对象(callable):可用 () 调用的实体,包括:

类型推断工具auto, decltype, 模板参数推导;尾置返回类型 -> decltype(expr)std::invoke 调统一调用语义。


1. 自由函数(free function)