函数名必须是动词或动词短语,采用 camelcase 风格,以动词开头体现行为意图,如 calculatetotal、isvalid;禁用下划线、全大写及 pascalcase;避免命名冲突,模板函数和回调函数同样适用该规则;缩写需清晰通用,禁用模糊缩写。

函数名必须是动词或动词短语,用 camelCase 风格(首字母小写,后续单词首字母大写),不能与类型、变量、宏等命名冲突。
函数名必须以动词开头
这是最核心的语义要求:函数表示“动作”,所以名称要体现行为意图。比如 calculateTotal 比 total 更准确,isValid 比 valid 更符合布尔函数的表达习惯。
常见动词前缀包括:
-
get:用于无副作用的取值(如getName) -
set:用于赋值(如setTimeout),但更推荐用更具体的动词(如configureTimeout) -
is/has/can:专用于返回bool的函数(如isConnected、hasPermission) -
find/search:暗示可能失败或需遍历(如findUserById) -
create/make/build:强调对象构造(如createLogger)
避免驼峰与下划线混用,且禁止全大写
snake_case(如 load_config)在 C++ 中通常只用于宏、常量或 C 风格接口;C++ 成员函数和自由函数应统一用 camelCase。混用会导致 IDE 补全混乱、团队协作歧义。
全大写(如 LOAD_CONFIG)是宏的专属风格,函数若这样命名会和 #define 冲突,且违反可读性原则——大小写本身就是语法信号。
错误示例:
void LOAD_CONFIG(); // ❌ 宏风格,易被误认为宏 void load_config(); // ❌ C 风格,与 C++ 成员函数惯例不一致 void LoadConfig(); // ❌ PascalCase,易与类名混淆
成员函数名需与作用域清晰区分
类内函数名本身不加前缀(如不写 m_getName),但要注意和同名全局函数/静态函数区分开。如果类 User 有 getName,就不要在同作用域定义另一个非成员的 getName —— 编译器可能不报错,但调用时容易因 ADL 或重载解析出错。
另外,构造函数、析构函数、运算符重载函数(如 operator==)是特例,不遵循动词规则,它们有固定命名形式,不能自定义。
易忽略点:
- 模板函数名仍须遵守
camelCase,如parseJsonString,而非ParseJsonString - 回调函数或函数对象(functor)也适用同一规则,不因“看起来像类型”而改用
PascalCase - lambda 本身无名,但赋值给的变量名也要符合函数命名逻辑,如
auto validateInput = [](const std::string& s) { ... };
命名长度与缩写必须可控
过短(如 calc、upd)或过度缩写(如 hdlr、tmp)会破坏可读性。C++ 不强制行宽限制,但函数名应能在不折行前提下完整传达意图。
缩写仅限广泛接受的术语:
-
id(不是ID或iD)→userId -
ptr→dataPtr(但优先用引用或智能指针,减少裸指针暴露) -
str→inputStr(仅当上下文明确为字符串时)
禁用模糊缩写:mgr(manager?margin?)、cfg(config?configuration?)、val(value?validate?)。这些在大型项目中极易引发理解偏差。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











