码迷,mamicode.com
首页 > 其他好文 > 详细

内联函数,宏定义,内存对齐,类型转换

时间:2018-10-20 16:29:04      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:source   int   换问题   tcp   预处理   出现   定义   替换   rtti   

宏 与 inline的区别

存在的价值,两者都是文本替换,降低程序跳转次数,提高效率

1. define 是预处理命令,无法调试 ,最简单文本替换,

    inline 是编译期替换,可以调试, 存在参数类型检查

2. 使用inline的时候,函数必须定义

  直接定义的函数,自动转化为inline

 define 怎么访问类的变量..,

////////////////////////////////////////////////////////////////////////////////////////////////////

内存对齐

原因:机器字长,寻址速度,运算速度,平台移植原因

原则:每个元素的起始地址都是 sizeof(自己) 的一定倍数

struct 中 套 struct ,按照原则,先对齐内层 struct,再对齐外部struct

union取最大

大端小段问题,分布式系统数据tcp数据包转换问题

////////////////////////////////////////////////////////////////////////////////////////////////

static_cast, dynamic_cast, const_cast, reinterpret_cast

任何问题在编译器能解决,尽量不要拖到运行期

升级1

char  c= 123; int * p =(int *)&c; //不安全代码,C编译器不做判断,能运行,但是有时候会出错

C中强转,在C++中被 static_cast<T>取代,编译期间做安全检查,C:B,A; C转为A,或者B ,会自动计算地址

升级2

子类父类 指针转换,static_cast<T>可以做到,但是带来了问题

子类转为父类(大的转为小的),访问的时候可能越界,报错,这个是运行时错误,static_cast<T>无法处理

于是出现了dynamic_cast<T>,主要用于向下转换

dynamic_cast<source>(expression),源和目标必须存在继承关系,必须存在虚函数,必须是指针与引用

如果能转换,就转换,如果不能转换就返回NULL(RTTI,运行时类型检查)

 

升级3

const_cast 

有些地方我们没法使用const变量,这个时候可以const_cast 去除(仅本次)const属性

 

升级4

reinterpret_cast

极其危险,不知道存在的价值

内联函数,宏定义,内存对齐,类型转换

标签:source   int   换问题   tcp   预处理   出现   定义   替换   rtti   

原文地址:https://www.cnblogs.com/sofard/p/9821756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!