怎么提交网站地图,最重要的网站,设计类专业前景,做投标的在什么网站找信息1. C语言中的类型转换 1. 隐式 类型转换#xff1a; 具有相近的类型才能进行互相转换#xff0c;如#xff1a;int,char,double都表示数值。 2. 强制类型转换#xff1a;能隐式类型转换就能强制类型转换#xff0c;隐式类型之间的转换类型强相关#xff0c;强制类型转换…1. C语言中的类型转换 1. 隐式 类型转换 具有相近的类型才能进行互相转换如int,char,double都表示数值。 2. 强制类型转换能隐式类型转换就能强制类型转换隐式类型之间的转换类型强相关强制类型转换之间类型关联没有那么大如整形和指针指针与指针。
int main()
{int a 0;// 隐身类型转换char b a;int c b a;// 强制类型转换double* d (double*)a;double* p new double;int* h (int*)p;return 0;
} 3.缺点转换的可视性比较差所有的转换形式都是一样的不好排查错误。 2. C支持的类型转换
1. 兼容C语言的所有转换。
2. 支持内置类型转自定义类型如单/多参数的构造函数支持隐式类型转换。
3. 支持自定义类型转内置类型
4. 支持自定义类型转自定义类型
class A
{
public:A() {}A(int i) {}// explicit 可以不让隐式类型转换// explicit A(int i, int j) {}A(int i, int j) {}// 自定义类型转内置类型operator int(){_code 10;return _code;}int _code;
};class B
{
public:B(const A a) {}};
int main()
{// C98 单参数构造A a1 1;// C11 多参数构造A a2 { 1,2 };// 自定义类型转内置类型int k (int)a1;// 自定义类型转自定义类型B b a1;return 0;
}
3. C4种强制类型转换(标准C为了加强类型转换的可视性引入了四种命名的强制类型转换操作符)
1. static_cast(隐式类型转换)
2. reinterpret_cast(强制类型转换)
int main()
{int a 0;// 隐身类型转换char b static_castint(a);int c static_castint(b) a;// 强制类型转换 double* d reinterpret_castdouble*(a);double* p new double;int* h reinterpret_castint*(p);return 0;
}
3. const_cast(删除变量的const属性)
int main()
{const int i 1;int* p const_castint*(i);(*p);cout *p endl;cout i endl;return 0;
}
虽然 i 是const修饰的但i本身还是在栈区只是属性是const(常变量)可以用强制转换成指针 但打印出来的结果不对劲因为被const修饰了编译器默认他不会修改直接放到寄存器里下次取数据直接拿寄存器里面的不会到内存里拿。
加上volatile关键字让编译器去内存里取数据 4. dynamic_cast(用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换)) 1. 只能用于父类含有虚函数的类。 2. 会先检查是否能转换成功能成功则转换不能则返回 0。 dynamic_cast 则会检查能否转换成功指向子类成功指向父类失败