函数签名中与签名无关的keyword

对于同一个函数,某些修饰符(关键词)可以写在 .hpp 中,但即使在 .cpp 中不写

C++ 中有一类修饰符属于声明限定符(declaration specifiers),它们影响声明语义,但不是函数签名(signature)的一部分。所以你写在 .hpp 中即可,.cpp 中可以不写。

修饰符.hpp.cpp 可以不写?是否推荐这样写?说明
inline✅ 是✅ 推荐用于 header-only 定义
virtual✅ 是✅ 推荐仅在声明处需要写
override❌(定义处不能写)✅ 推荐仅做声明期检查
final❌(定义处不能写)✅ 推荐和 override 类似
explicit❌(只能在声明中)✅ 推荐仅限构造函数声明

对于同一个函数,某些修饰符可以写在 .cpp 中定义时添加,而在 .hpp 中声明时省略,依然合法

修饰符.cpp 中单独写合法?.hpp 中可省略?是否影响签名?说明
inline✅ 合法✅ 可省略❌ 否.cpp 中加 inline 是提示优化器,可省略声明处
static✅ 合法✅ 可省略❌ 否改变链接属性,仅影响该 .cpp 内可见性
[[nodiscard]] 等属性✅ 合法✅ 可省略❌ 否编译器属性标注,不改变匹配规则
__attribute__(GCC/Clang)✅ 合法✅ 可省略❌ 否编译器扩展,可只写在定义中
inline static(变量)✅ 合法.hpp 中写才有意义❌ 否常见于 header-only 模式,建议写在头文件

建议(正式、专业):

  1. 对于不影响链接/类型的修饰符(如 inline, virtual, override),你可以只在 .hpp.cpp 中不必重复。

  2. 对于影响类型/签名的修饰符(如 const, constexpr, noexcept),必须 .hpp/.cpp 保持一致,否则报错或类型不匹配。

  3. 出于可读性和一致性考虑,建议尽可能在定义中也保留 .hpp 中的修饰符(特别是内联函数、常量表达式函数)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值