在C++结构体中同时声明类型与变量是否属于不良编程实践?
为什么结构体类型和变量同时声明被视为不良编程实践
你觉得这种写法简洁合理很正常——毕竟少写了几行代码,但从长期维护和代码可读性的角度看,它确实有不少问题:
可读性差,找类型定义费劲
当代码规模变大,结构体定义和变量声明挤在一起,其他人(甚至几周后的你)要找fullName这个类型的具体结构时,得在一堆变量名里“扒”。如果后面跟着好几个变量,结构体的结束位置和变量声明混在一起,快速扫代码时很难一眼区分“类型定义”和“变量实例”的边界。限制类型复用,后续修改麻烦
要是这种写法写在函数内部,fullName类型只能在这个函数里用;就算是全局作用域,后续想在其他文件或函数里再定义该类型的变量时,要么得重复写结构体的完整定义,要么就得把原来的写法拆成“先声明类型,再定义变量”——反而比一开始就分开写更麻烦。容易混淆类型和变量,引发错误
新手很容易把变量名和类型名搞混,比如不小心用examplePerson1去定义新变量(当然编译器会报错,但排查起来浪费时间)。另外,这种写法在C和C++里的行为有细微差异(C里必须加struct才能用类型名),但核心问题还是代码清晰度不足,增加阅读者的理解成本。不符合主流编码规范的关注点分离原则
现在主流的C++编码规范(比如Google、LLVM规范)都要求把“类型定义”和“变量实例化”分开——类型是对数据结构的抽象定义,变量是这个抽象的具体实例,分开写能让代码结构更清晰,职责更明确。
举个更规范的写法对比:
// 单独声明结构体类型,明确这是一个数据结构定义 struct fullName { string firstName; string middleName; string lastName; }; // 按需定义变量,清晰表明这些是fullName类型的实例 fullName examplePerson1, examplePerson2;
这种写法不管代码多长,找类型定义和变量都一目了然,后续复用类型也直接拿来用就行。
内容的提问来源于stack exchange,提问作者moonchy
相关产品推荐
相关产品推荐

