C/C++程序基础 (二)常用知识点
- 使用宏实现max
- 注意括号在宏内的使用
#define MAX(x, y) ( ( (x) > (y) ) ? (x) : (y) )
宏参数连接
a##e##b
- 转化为字符串 #a
- const
- const int* a; 左侧,修饰变量
- int* const a;右侧,修饰指针
- const 与宏的区别
- #define 预处理器将宏变为代码,属于代码段。
- const 有类型,在编译阶段会有类型检查,和其他变量一样可以被调用、传递。属于数据段。
- const在C++的作用(按照应用情景分别介绍)
- 定义变量,表示变量为常量
- 修饰形式参数,表示参数不可以被修改(节省按值传递的构造、复制、析构开销)
- 修饰返回值,表示返回值为常量
- 修饰成员函数,表示成员函数内不会修改对象的成员变量。(注意:不可以调用非const 函数)
- static关键字的用法
- 静态局部变量:改变存储,从自动存储区(auto)移到静态存储区(static, extern)。从而改变生命周期。
- 静态全部变量:改变作用域,单文件,初始化一次(0)。
- 静态函数:改变作用域,单文件。避免多文件冲突。
- 静态成员变量:属于类,类加载时初始化。类名访问。
- 静态成员函数:属于类,仅可调用静态成员变量。类名访问。
- sizeof 操作符:计算内存大小,用于动态分配等
- 字符串:strlen() + 1 = sizeof 结束字符'\0'
- 指针和数组:数组是完整内存,除非处理形式参数。
- 对象:对齐规则(每个成员的偏移量是自身大小的整数倍;总大小是最宽成员大小的整数倍)
- 含虚函数:指向虚函数表的指针。
- 普通继承:sizeof(父类)+ sizeof(子类)
- 虚拟继承:指针指向虚基类表,表内存储基类的偏移。故保存父类的数据,但仅仅一份。
- union对齐:
- 最大的数据成员
- 符合每个成员的对齐规则
- #pragma pack(n) 设置对齐单元
- inline函数
- 与宏的区别:编译(预处理)时展开调用;本质是函数,存在类型检查等编译功能,可以调试;不存在宏的二义性问题;可以处理对象成员。
- 适用情形:函数代码少(避免代码膨胀);不包含递归,循环等(优势小);析构和构造函数不建议,建议存取函数。
- 如何定义:类声明内定义函数默认为内联函数;头文件定义的内联函数(定义时必有inline关键字)
C/C++程序基础 (二)常用知识点的更多相关文章
- JAVA并行程序基础二
JAVA并行程序基础二 线程组 当一个系统中,如果线程较多并且功能分配比较明确,可以将相同功能的线程放入同一个线程组里. activeCount()可获得活动线程的总数,由于线程是动态的只能获取一个估 ...
- 微信小程序基础之常用控件text、icon、progress、button、navigator
今天展示一下基础控件的学习开发,希望对大家有所帮助,转载请说明~ 首先延续之前的首页界面展示,几个跳转navigator的使用,然后是各功能模块的功能使用 一.text展示 使用按钮,进行文字的添加与 ...
- Java基础之常用知识点博客汇总
正则: 正则表达式 :https://www.cnblogs.com/lzq198754/p/5780340.html 正则表达式大全:https://blog.csdn.net/zpz2411232 ...
- python开发基础(二)常用数据类型调用方法
1 数字: int 2 3 int : 转换,将字符串转化成数字 4 num1 = '123' 5 num2 = int (a) 6 numadd = num2 +1000 7 print(num2) ...
- ROS_Kinetic_11 ROS程序基础Eclipse_C++(二)
ROS_Kinetic_11 ROS程序基础Eclipse_C++(二) 编写简单的Service和Client (C++): http://wiki.ros.org/cn/ROS/Tutorials ...
- Java并发程序设计(二)Java并行程序基础
Java并行程序基础 一.线程的生命周期 其中blocked和waiting的区别: 作者:赵老师链接:https://www.zhihu.com/question/27654579/answer/1 ...
- 小程序基础知识点讲解-WXML + WXSS + JS,生命周期
小程序基础 小程序官方地址,小程序开发者工具,点击此处下载.在微信小程序中有一个配置文件project.config.json,此文件可以让开发者在不同设备中进行开发. 微信小程序共支持5种文件,wx ...
- Java基础学习总结(40)——Java程序员最常用的8个Java日志框架
作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用以及移动应用.然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,日志可以帮助我们更好更快地定位bug:在 ...
- JAVA常用知识点及面试题总结
1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...
- 2、JavaScript 基础二 (从零学习JavaScript)
11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...
随机推荐
- 纯干货:Linux抓包命令集锦
/******************************************************************************************* 版权声明* 本 ...
- mysql CPU占用高
https://blog.csdn.net/u011239989/article/details/72863333 QPS高,sql简单的场景下, 需要 1. 提高数据库的服务器性能CPU 内存等 2 ...
- python模块之datetime方法详细介绍
datetime Python提供了许多内置模块用于操作时间日期,如calendar,time,datetime,这篇文章主要是对datetime进行汇总,datetime模块的借口实现原则更加直观, ...
- eclipse导入maven项目有时出现web.xml is missing的问题
今天导入一个从Git上pull下来的项目导入eclipse时,报错web.xml is missing,但是我检查了webapp下面的WEB-INF目录下是有web.xml的,然后就纠结了.纠结了半天 ...
- ASP.NET Core集成微信登录
工具: Visual Studio 2015 update 3 Asp.Net Core 1.0 1 准备工作 申请微信公众平台接口测试帐号,申请网址:(http://mp.weixin.qq.com ...
- Java 记录日志
Java9的日志级别: ALL 最低级别,系统会输出所有的日志信息,会生成大量的·.冗余的日志 TRACE 输出系统的各种跟踪信息,会生成大量的·.冗余的日志 DEBUG 输出调试信息,会生成较多的日 ...
- centos6安装lnmp
CentOS 6 默认仓库不包含nginx,我们可以手动添加nginx的仓库. 访问nginx官网获取repo文件 我们需要先访问nginx的官方网站,获取官方的仓库地址.点击这里访问nginx官方文 ...
- Django---ORM简介丶单表操作丶增删改查
一丶ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- ubuntu 16.04安装nVidia显卡驱动和cuda/cudnn踩坑过程
安装深度学习框架需要使用cuda/cudnn(GPU)来加速计算,而安装cuda/cudnn,首先需要安装nvidia的显卡驱动. 我在安装的整个过程中碰到了驱动冲突,循环登录两个问题,以至于最后不得 ...
- HTML 笔记之 HTML 元素的概念
HTML 不是编程语言,它是一种标记语言 HTML 中常见的几个名词是 元素. 标签(开始标签和结束标签). 属性. 元素内容 这篇文章将要介绍的是 HTML 元素的概念 元素的概念 例子: < ...