c++集锦

dynamic_cast:
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
在类层次间进行上行转换时,dynamic_cast和 static_cast 的效果是一样的;
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。
static_cast相当于强制转换,编译时执行,dynamic_cast是动态转换,运行时执行。进行上行转换时使用这两个都可以,都是安全的,
但是在运行时,我们不确定到底转换是否安全,可能是下行转换,父类往子类转换,这个转换很危险的,除非我们知道可以这样转,那么我们
在编译时就用static_cast进行转换,这个告诉编译器,这个转换很安全。但是要是不确定呢,我们希望是安全转换,那么就应该用dynamic_cast.
dynamic_cast相当于instance of, is a。
使用 dynamic_cast的类型必须要有虚函数表,因为动态类型信息的指针是放在虚函数表中的,
sizeof:字节数的计算在编译时进行,不能求动态空间的大小。
macro:
#include 包含头文件
#if 条件
#else 否则
#elif 否则如果
#endif 结束条件
#ifdef 或 #if defined 如果定义了一个符号, 就执行操作
#ifndef 或 #if !defined 如果没有定义一个符号,就指执行操作
#define 定义一个符号
#undef 删除一个符号
#line 重新定义当前行号和文件名
#error 输出编译错误 消息, 停止编译
#pragma 提供 机器专用的特性,同时保证与C++的完全兼容
#define的缺点:
1)不支持类型检查
2)不考虑 作用域
3) 符号名不能限制在一个命名 空间中
标准的预处理器宏:
__LINE__ 当前 源文件中的代码行号, 十进制整数
__FILE__  源文件的名称,字符串 字面量
__DATE__  源文件的处理日期,字符串字面量,格式mmm dd yyyy其中mmm是月份如Jan、Feb等 dd是01-31 yyyy是四位的年份
__TIME__ 源文件的编译 时间,也是字符串字面量格式是hh:mm:ss
__STDC__ 这取决于实现方式,如果 编译器选项设置为编译标准的C代码,通常就定义它,否则就不定义它
__cplusplus 在编译C++ 程序时,它就定义为199711L
assert()宏可以使用#define NDEBUG来关闭断言 机制



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值