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


    宏 与 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

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

  • 相关阅读:
    在 SQL2005 使用行转列或列转行
    JOIN 和 WHERE?简单的问题也有学问。
    完整的获取表结构语句
    经典背景音乐收集
    interface 是什么类型?
    WMI使用集锦
    存储过程+游标,第一回开发使用
    Sql Server 基本语句汇总
    PowerDesigner 设置各项变量参数的路径
    测试
  • 原文地址:https://www.cnblogs.com/sofard/p/9821756.html
Copyright © 2020-2023  润新知