从C到C++ (1)
从C到C++
一、 bool类型
bool取值false和true,是0和1的区别; false可以代表0,但true有很多种,并非只有1。
二、 const限定符
- 常量在定义后就不能修改,所以定义时必须初始化。
- 在一个文件全局作用域中定义非const变量,在另外的文件中做extern声明,就可以使用这个变量。但是,对于一个文件全局作用域中定义的const变量,在另外的文件中做extern声明,是不能被访问的:
//文件一
const int counter=func();
//文件二
extern const int counter;
++counter; //这里变量声明后不可以用
这里const变量要想能够被其他的文件访问,必须显示的指定它为extern:
//文件一
extern const int counter=func();
//文件二
extern const int counter;
++counter; //这里变量声明后可以用
3. const int *p ; // *p为常量,经由*p不能更改指针所指向的内容。
int * const p; // p为常量,不能更改p指向,可以更改p所指向的内容。
4. const 与 #define区别
1) const定义的常量有类型,而#define定义的常量没有类型,编译可对前者做类型安全检查,而后者仅仅是做简单替换。
2) const定义的常量在编译时分配内存,而#define定义的常量在预编译时进行替换,不分配内存,程序加载到内存时才分配内存。
3) 作用域不同,const定义的常变量的作用域为该变量的作用域范围。而#define定义的常量作用域为它的定义点到程序结束,当然也可以在某个地方用#undef取消。
定义常量还可以用enum。高层编译尽量用enum、const替换#define定义常量。底层编译#define有很大的灵活性。
三、 结构体内存对齐
- 为什么要对齐:
数据存在与对齐的内存地址中CPU读取数据的速度大大提升
2. 如何对齐:
4) 第一个数据成员对齐至偏移值为0的地方
5) 接下来的数据成员对齐(start)至对齐模数的整数倍。
对齐模数 = 数据成员的大小与pragma pack(n) (对齐值gcc(4) vc(8))的较小值 注意gcc对齐数的取值是0 1 2 4
6) 每个成员都有自己的对齐数 最总整个结构体对齐至成员最大对齐数的倍数。
例:
typedef struct test
{
char ch1;//start 0 size=1 end=1
double d;//mix(8:8)=8 -> start 8(对齐至8的整数倍) size=8 end=16
char ch2;//mix(1:8)=1 -> start 16(对齐至1的整数倍) size=1 end=17
}test_t; //last 17:8x end=24 整个结构体大小为8的倍数即24
随机推荐
- bzoj4999 This Problem Is Too Simple!
Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2^31) 表示将i节点的值改为x. 2. Q i j x(0<=x&l ...
- POJ 3734 生成函数
题意:一排n长度的砖,有四种颜色,红色绿色是偶数,有少染色方式. 分析: 泰勒展开式: chx = (e^x+e^(-x))/2 = 1 + x^2/2! + x^4/4! + x^6/6! + .. ...
- 百度提供的LBS服务
并不是所有 LBS 云服务 都可以使用 js Ajax 访问,涉及跨域问题 (Jsonp 方式解决)Jsonp 解决跨域问题原理,在页面生成<script> 加载远程 js 代码片段.在L ...
- 188. Best Time to Buy and Sell Stock IV——LeetCode
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- o'Reill的SVG精髓(第二版)学习笔记——第六章
第六章:坐标系统变换 想要旋转.缩放或者移动图片到新的位置.可以给对应的SVG元素添加transform属性. 6.1 translate变换 可以为<use>元素使用x和y属性,以在特性 ...
- Restframework中常见API的编写方式
1.框架一(继承APIView) 这里的第一部分使用骨架请参考我的博客(第三篇),它采用了restframework中最基础的办法(APIView)实现了相关请求,以下的框架都是基于它的 2.框架二( ...
- 关于改变placeholder的颜色
input::-webkit-input-placeholder{ color:red; } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ co ...
- Spring知识点总结(四)之SpringAOP基础 - 代理设计模式
1. 分析程序中存在的问题(高内聚,低耦合) 通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...
- 协议类接口 - UART
一.何为协议类接口? 双方约定信号的协议和满足时序要求. 二.UART如何传数据 通用异步收发器简称 UART,即“Universal Asynchronous Receiver Transmitte ...
- 零基础Python知识点回顾(一)
如果你是小白,建议只要安装官网的python-3.7.0-amd64.exe 然后在电脑cmd命令提示符 输入检查是否已经安装pip,一般安装了python都会有的. >pip ...