首页 > 编程语言 >序章 高质量C++/C编程指南

序章 高质量C++/C编程指南

时间:2023-03-06 11:11:47浏览次数:40  
标签:语句 常量 编程 C++ 序章 参数 基类 函数

一、文件结构

  1. 避免头文件被重复引用,用 #pragma once 进行预处理
  2. 用 <> 引用标注库头文件,用 "" 引用自定义库头文件
  3. C语言头文件只进行函数声明,不进行函数定义;C++类的成员可在声明的同时定义

二、程序板式

  1. 每个类声明、函数定义之后都要加上空行,函数体内可用空行进行逻辑分隔
  2. 一行代码只执行一条语句,if、while、for...语句必须加上 { }
  3. 尽可能在定义变量的同时进行初始化
  4. 关键字之后留一个空格,函数后面不留空格以区分关键字,操作符视情况留空格
  5. 花括号选择K&R风格或者微软风格之一,保持代码风格一致,根据项目与公司要求变通
  6. 类的封装“以行为为中心”,将public的函数写在前,将private的数据写在后

三、命名规则

  1. 变量:“名词”或“形容词+名词”,例如 value、oldValue
  2. 函数:“动词”或“动词+名词”,例如 Draw()、DrawMap()
  3. 类名、函数:用大写字母开头的单词组合而成,例如 Node、ListNode
  4. 变量、参数:用小写字母开头的单词组合而成,驼峰命名,例如 flag、minValue
  5. 常量:全大写字母,用下划线分隔,例如 MAX、MAX_VALUE
  6. 静态变量:加前缀“s_”
  7. 全局变量:尽量避免使用,使用时加前缀“g_”
  8. 类的数据成员:加前缀“m_”,表示member

四、表达式与基本语句

  1. 一元运算符的优先级高于二元运算符
  2. 不可将浮点数用“==”或“!=”与任何数字进行比较,而应该比较精度
  3. 多重循环中,将长循环放内层,短循环放外层,减少cpu跨切循环层的次数
  4. 当逻辑判断嵌套循环语句,先进行逻辑判断再执行循环语句,可提高效率
  5. switch语句的每个case语句都要视条件尽量加上break,避免多分支重叠
  6. goto语句存在破坏程序结构化的隐患,慎用,但在多重循环中可直接跳出循环

五、常量

  1. const常量具有数据类型,而宏常量没有数据类型,编译器可对前者进行安全检查
  2. C++程序中完全用const常量取代宏常量
  3. 枚举常量在整个类中都是恒定的常量,不会占用对象的存储空间

六、函数设计

  1. 若参数是不需要修改的值,在类型前面加上const,防止被意外修改
  2. 用 & 引用传参可省去临时对象的构造和析构过程,提高效率
  3. 在函数入口处用 assert 断言检查参数有效性,assert是仅在debug版本起作用的宏
  4. 引用必须被初始化,且不能为空,一旦初始化就不能改变引用的关系

七、内存管理

  1. 动态内存的申请与释放必须配对,malloc/free 和 new/delete,避免内存泄漏
  2. 释放内存之后,将指针置空,避免出现“野指针”
  3. malloc/free 是C/C++标准库函数,new/delete 是C++运算符,new/delete 拥有构造和析构功能
  4. C++代码用 new/delete 取代 malloc/free

八、C++高级特性

  1. 重载:同一个类中,函数名相同,参数不同
  2. 覆盖:派生类与基类中,函数名相同,参数相同,基类必须有vitrual关键字
  3. 隐藏:派生类的函数屏蔽了其同名的基类的函数,注意区别隐藏与覆盖
  4. 当基类与派生类函数同名,若参数相同,基类有virtrual关键字是覆盖,无则是隐藏;若参数不同,则一定是隐藏
  5. 参数缺省值:参数的缺省值只能从后往前逐个进行缺省
  6. 不能被重载的运算符:(1) .    (2) ?:    (3) .*    (4) ::    (5)sizeof   
  7. C++用内联函数取代宏代码,内联关键字 inline 必须与函数定义放在一起才能生效

 

【参考文献:《高质量C++/C编程指南》——林锐】

标签:语句,常量,编程,C++,序章,参数,基类,函数
From: https://www.cnblogs.com/phoenixflyzzz/p/17183024.html

相关文章

  • 我的十年编程路 2016年篇
    时光匆匆,2016年来了,此时的我已经工作了3年有余。过去的三年,虽有坎坷,但总体顺利,是个逐渐上升的线。进入2016年后,我不再做那些技术探索方面的App了。部门的拳头产品——加密......
  • Python--并发编程
    1.并发和并行的区别是什么?1个核,最大1个并行。可以N个并发。4个核,最大4个并行。可以N个并发。对于人的使用来讲,对并发和并行不感知。2.四核八线程是什么意思?四核八......
  • Python、C++、Swift或任何其他语言会取代Java吗?为什么?
    很难预测Python,C++,Swift或任何其他编程语言是否会取代Java作为最受欢迎的语言,但在不久的将来不太可能.以下是一些原因:受欢迎程度并建立的用法:Java已经存在了25年以上,并......
  • C++类和对象
                       ......
  • C++--引用和函数调用
             ......
  • C++编译小技巧
    1.单文件//math.cppintmultiply(inta,intb){returna*b;}//main.cpp#include<iostream>intmain(){ std::cout<<"Hello,world!"<<std::endl; s......
  • 虚幻c++的习惯
    枚举E打头 起名字用E加后面的驼峰  用UENUM宏标记是为了通过反射系统给蓝图使用识别,nint8是为了限制枚举的范围  可以为了使蓝图端更方便使用 加到具体的注......
  • 2022年第十三届蓝桥杯大赛软件类省赛C/C++大学A组真题
    Preface周末没什么比赛打索性开始准备下蓝桥杯,然后就想着找一下去年的真题来做一下结果yysy去年的真题说实话有点难度的,感觉出题风格偏向OI比赛而和ACM的风格不太像啊感......
  • C++枚举型变量用法
    #include<iostream>#include<string>usingnamespacestd;intmain(){enumname{one,two=23,three};//强制类型转换inta=one;cout<<a<<endl;//不能这样直接赋值//one......
  • C++友元函数(非成员函数)
    #include<iostream.h>#include<string>classStudent{private:intage;public:Student(){age=10;}out(){cout<<age<<endl;}//申明友元函数必须要在类中申明但是......