当前位置: 首页 > news >正文

《编码的法则--C++实用经验》

1.C/C++采用静态编译模型,结构和类的大小都是在编译后确定的

  定义结构和类变量时,需要根据大小来分配内存模型

 

2.头文件包含问题:

  (1)可以不包含头文件,那就不要包含

  (2)尽量在CPP文件中包含头文件,而非在头文件中

  (3)如果两个类相互递归定义,考虑前向声明或友元

   (4)使用#ifndef, 不要使用#pragma once(考虑到跨平台问题)

 

3.virtual 虚函数

  虚函数表在编译时生成

 

4.local static 变量使得函数不具有线程安全,不可重入

 

5. assert是宏而不是函数,仅在Debug版本起作用

 

6. 函数调用会产生开销(保护现场、恢复现场),函数开销 = 调用开销 + 函数体开销

 

7. 函数重载是自然语言一词多义在编程语言中的体现

  (1)使代码可读性更好(抽线更好)

  (2)构造函数  

 

8. 函数的可变参数没有类型检查,这样不安全

 

9. 降低函数复杂度是提高软件质量的一个重要手段

 

10. windows系统底层全部采用Unicode编码,ASCII接口也是在内部调用了Unicode接口,所以WinApp在开发时应采用Unicode字符串

  windows的Unicode编码为UTF-16, 而Linux流行的编码方案为UTF-8

 

11. 0 和 '0' 是不一样

  0是整形,内存模型全0

  '0'是字符,ascii为33

 

12. 缓冲区溢出

  C字符串以'\0'结尾,如果结尾处没有'\0',就会一直往后找

 

13. 预处理是编译器的工作,和C语言无关

  宏的作用域为文件(所以一般定义在头文件中)

  

14. 宏没有命名空间的限制

  因为命名空间(namespace)是C++的东西,而宏是从C过来的

  因为C没有命名空间,所以一个项目引入了很多第三方库之后,很多时候会导致命名冲突、类型重复定义

 

15. #和##

  #:字符串化操作符

    #define _raise_error(info) _raise(#info)

  ##: 符号连接操作符

    #define _T(x) L##x

 

16. 

转载于:https://www.cnblogs.com/aoun/p/5776041.html

相关文章:

  • 什么是mybatis?
  • nodejs 更新最新版本
  • Git版本控制
  • 1025 选菜
  • 极简.高性能.分布式框架,可运行于多种环境(apache/php-fpm,swoole)
  • bootstrap 使用table表单布局 隐藏显示行
  • 一键部署Openstack R版
  • redis3.2 最新版本启动配置文件redis.conf详细说明
  • Slack将新增更多功能免写程序就能自动排工作流程
  • Java 集合框架之 Map
  • 《编程珠玑》读书笔记(2,3)
  • 读书:全职高手
  • 思科模拟器-DHCP配置
  • 在Linux上限制远程登陆的IP
  • Docker 服务编排 Mesos Swarm Kubernetes 三种模式实践
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • AHK 中 = 和 == 等比较运算符的用法
  • ECMAScript入门(七)--Module语法
  • flask接收请求并推入栈
  • Redux 中间件分析
  • Spring Boot MyBatis配置多种数据库
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring声明式事务管理之一:五大属性分析
  • webpack4 一点通
  • 聊聊sentinel的DegradeSlot
  • 树莓派 - 使用须知
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信开放平台全网发布【失败】的几点排查方法
  • 【云吞铺子】性能抖动剖析(二)
  • NLPIR智能语义技术让大数据挖掘更简单
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #define、const、typedef的差别
  • #pragma预处理命令
  • (function(){})()的分步解析
  • (ibm)Java 语言的 XPath API
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三)Honghu Cloud云架构一定时调度平台
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (四)汇编语言——简单程序
  • (译) 函数式 JS #1:简介
  • (转)Android学习笔记 --- android任务栈和启动模式
  • .NET 5种线程安全集合
  • .net core 6 集成和使用 mongodb
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 反射 Reflect
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @Responsebody与@RequestBody
  • @RestControllerAdvice异常统一处理类失效原因
  • [2]十道算法题【Java实现】
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...