如何将其他类型转换为当前类的构造函数?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3075个文字,预计阅读时间需要13分钟。
在C/C++中,不同的数据类型之间可以进行相互转换。无需用户指定转换的称为自动类型转换(隐式类型转换),需要用户明确指定的称为强制类型转换(显式类型转换)。
自动类型转换示例:int a=10;double b=a; // 自动将int转换为double
强制类型转换示例:int a=10;double b=(double)a; // 强制将int转换为double
在 C/C++ 中,不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换。自动类型转换示例:
int a = 6;
a = 7.5 + a;
编译器对 7.5 是作为 double 类型处理的,在求解表达式时,先将 a 转换为 double 类型,然后与 7.5 相加,得到和为 13.5。在向整型变量 a 赋值时,将 13.5 转换为整数 13,然后赋给 a。整个过程中,我们并没有告诉编译器如何去做,编译器使用内置的规则完成数据类型的转换。
强制类型转换示例:
int n = 100;
int *p1 = &n;
float *p2 = (float*)p1;
p1 是int *类型,它指向的内存里面保存的是整数,p2 是float *类型,将 p1 赋值给 p2 后,p2 也指向了这块内存,并把这块内存中的数据作为小数处理。我们知道,整数和小数的存储格式大相径庭,将整数作为小数处理非常荒诞,可能会引发莫名其妙的错误,所以编译器默认不允许将 p1 赋值给 p2。但是,使用强制类型转换后,编译器就认为我们知道这种风险的存在,并进行了适当的权衡,所以最终还是允许了这种行为。
本文共计3075个文字,预计阅读时间需要13分钟。
在C/C++中,不同的数据类型之间可以进行相互转换。无需用户指定转换的称为自动类型转换(隐式类型转换),需要用户明确指定的称为强制类型转换(显式类型转换)。
自动类型转换示例:int a=10;double b=a; // 自动将int转换为double
强制类型转换示例:int a=10;double b=(double)a; // 强制将int转换为double
在 C/C++ 中,不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换。自动类型转换示例:
int a = 6;
a = 7.5 + a;
编译器对 7.5 是作为 double 类型处理的,在求解表达式时,先将 a 转换为 double 类型,然后与 7.5 相加,得到和为 13.5。在向整型变量 a 赋值时,将 13.5 转换为整数 13,然后赋给 a。整个过程中,我们并没有告诉编译器如何去做,编译器使用内置的规则完成数据类型的转换。
强制类型转换示例:
int n = 100;
int *p1 = &n;
float *p2 = (float*)p1;
p1 是int *类型,它指向的内存里面保存的是整数,p2 是float *类型,将 p1 赋值给 p2 后,p2 也指向了这块内存,并把这块内存中的数据作为小数处理。我们知道,整数和小数的存储格式大相径庭,将整数作为小数处理非常荒诞,可能会引发莫名其妙的错误,所以编译器默认不允许将 p1 赋值给 p2。但是,使用强制类型转换后,编译器就认为我们知道这种风险的存在,并进行了适当的权衡,所以最终还是允许了这种行为。

