面向想要系统掌握 “函数在 C++ 里到底能怎么定义、怎么声明、怎么组合各种限定符/模板/捕获/推断/修饰” 的学习者。本总结基于 C++20/C++23 主流特性,必要时标注版本差异;旧标准兼容点也会提及。示例代码力求最小可读。
int add(int, int); // 声明
int add(int a, int b) { return a + b; } // 定义
同一翻译单元(translation unit)内同名同签名函数只能定义一次(ODR)。多个 TU 可重复声明,且最终链接时需要且只能有一个定义(inline 例外,见后文)。
可调用对象(callable):可用 () 调用的实体,包括:
operator() 的类对象)std::function 封装对象std::bind 与其他可调用包装器类型推断工具:auto, decltype, 模板参数推导;尾置返回类型 -> decltype(expr);std::invoke 调统一调用语义。