c++集锦

来源:互联网 发布:cnc编程代码 编辑:程序博客网 时间:2024/05/22 10:45
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
原创粉丝点击