一、类型转换
1、强制类型转换::类型不同,而且不属于基本数据类型(int double...)时,经常需要强制类型转换
①、显示强制类型转换
TYPE b = (TYPE) a;
C++中强制类型转换函数有4个:
const_cast(用于去除const属性),
static_cast(用于基本类型的强制转换),
dynamic_cast(用于多态类型之间的类型转换),
::dynamic_cast < type-id > ( expression ) 该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*; 如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。 dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
reinterpreter_cast(用于不同类型之间的指针之间的转换,最常用的就是不同类型之间函数指针的转换)。
2、隐式强制类型转换
自动类型转换分两种情况:
①,不同类型的数据进行运算时,系统会自动将运算优先级别低的转换成级别高的,结果和运算级别高的数据类型一样。
②,赋值运算符两边类型不一样时,系统会自动将右侧表达式的类型转换成左侧的变量类型,然后再赋值
3、不允许的经过转换构造函数进行的隐式转换的发生。explicit 不能AAA = XXX
二、静态static
1 静态数据成员的类型可以是其所属类而非static 数据成员只能被声明为该类的对象的指针或引用例如
class Bar {
public:
private:
static Bar mem1; // ok
Bar *mem2; // ok
Bar mem3; // 错误
};
2 静态数据成员可以被作为类成员函数的缺省实参而非static 成员不能例如
extern int var;
class Foo {
private:
int var;
static int stcvar;
public:
// 错误: 被解析为非 static 的 Foo::var
// 没有相关的类对象
int mem1( int = var );
// ok: 解析为 static 的 Foo::stcvar
// 无需相关的类对象
int mem2( int = stcvar );
// ok: int var 的全局实例
int mem3( int = ::var );
};
静态成员函数::静态成员函数的声明除了在类体中的函数声明前加上关键字static 以及不能声明为const 或volatile 之外与非静态成员函数相同
(1)、出现在类体外的函数定义不能指定关键字static
(2)、静态成员函数没有this 指针
(3)、访问时用类::标识
三、修饰符
1、const
①、对类型 限定为常量
②、作为函数参数 限定参数不可改变或成员变量不变
2、typedef
①、类型的类别,不是简单的宏替换
②、定义结构体struct放在前面
3、static
.........
4、inline
内联函数:用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 一个小内存空间的函数非常受益。
5、extern
声明函数或者变量,让在另一文件中使用
6、volatile
每次使用时重新读取值
①. 并行设备的硬件寄存器(如:状态寄存器)
②. 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
③. 多线程应用中被几个任务共享的变量
posted on 2011-11-30 20:32
Yu_ 阅读(385)
评论(0) 编辑 收藏 引用 所属分类:
C/C++