一、c++类型转换
// 精度损失:float -> int
#include<iostream>
using namespace std;
int main()
{
float f = 3.5f;
int i = f; //f自动转换成int类型
cout << i << endl; //输出3, 精度被损失
return 0;
}
c++中的隐式类型转换与js比起来略微有些严格。由上述代码可知,当一个变量的类型被强制转换时,如果转换会导致精度损失,则编译器会发出警告提示。
二、强制类型转换C语言
//强制类型转换1:C语言风格
#include<iostream>
using namespace std;
int main()
{
int i = 10;
float f = (float)i; //C语言风格, 强制类型转换
cout << f << endl; //输出10.0
return 0;
}
强制类型转换C语言的风格与js转换类型的方式相同。当将一个高精度类型的变量赋值给低精度类型,或者当需要使用一种类型的变量作为另一种类型的参数时,可以使用强制类型转换来满足编译器的检查。
三、强制类型转换
//强制类型转换2:C++风格
#include<iostream>
using namespace std;
int main()
{
int i = 10;
float f = static_cast<float>(i); //C++风格,强制类型转换
cout << f << endl;
return 0;
}
C++风格的类型转换使用关键字`static_cast`来转换类型。由于代码中使用了强制类型转换,所以编译器不再发出警告。
四、c强制类型转换举例
#include<iostream>
using namespace std;
int main()
{
int i = 97;
char c = (char)i; //强制类型转换为char
cout << c << endl; //输出a
return 0;
}
c强制类型转换也是一种强制类型转换的方式,可以将一个变量转换为另一个具有不同数据类型的变量。
五、c语言类型转换
#include<iostream>
using namespace std;
int main()
{
int i = 100;
float f = (float)i; //强制类型转换, c语言风格
cout << f << endl; //输出100.0
return 0;
}
c语言中的类型转换也可以使用强制类型转换的方式来实现。将一个变量转换为另一个不同类型的变量时,必须使用括号将变量名括起来,并在括号之前加上新要转换的类型的标识符。
六、隐式类型转换
#include<iostream>
using namespace std;
int main()
{
float f = 3.5f;
int i = f; //隐式类型转换
cout << i << endl; //输出3
return 0;
}
在ts类型转换中,隐式类型转换是一种自动完成的类型转换方式。当ts需要一种类型的变量作为另一种类型的参数时,ts会自动将两种不同类型的变量之间进行隐式类型转换。从上述代码可以看到,当将一个float类型的变量赋值给int类型的变量时,会发生隐式类型转换,但是会导致精度上的损失。
七、转换类型class
class Animal
{
public:
virtual void run();
};
class Dog : public Animal
{
public:
void run()
{
cout << "小狗在跑!" << endl;
}
void eat()
{
cout << "小狗在啃骨头!" <(animal1);
dog1->run(); //输出:小狗在跑!
dog1->eat(); //非法,无法访问
return 0;
}
在ts类型转换中,有时需要将一个派生类的指针转换为一个基类的指针,或将一个基类的指针转换为一个派生类的指针,转换类型class便可满足这一需求。
八、自动类型转换
#include<iostream>
using namespace std;
int main()
{
int i = 10;
double d = i; //自动类型转换
cout << d << endl; //输出10
return 0;
}
自动类型转换是一种非常常见的类型转换方式,编译器会自动将其中一种类型的变量转换为另一种类型的变量,以便匹配相应的数据类型。在上述代码中,将一个int类型的变量赋值给double类型的变量,编译器会进行自动类型转换。
九、nat转换类型
#include<iostream>
using namespace std;
int main()
{
int i = 10;
int* p = &i;
double* pd = static_cast<double*>(static_cast<void*>(p));
*pd = 3.5;
cout << i << endl; //输出1745489024
cout << *pd << endl; //输出3.5
return 0;
}
nat转换类型是将一个指针类型转换为另一种类型指针类型的过程。有时会需要将一个非常量指针类型转换为另一种非常量指针类型,例如将int指针类型转换为double指针类型。这种情况下,可以使用nat转换类型来满足这一需求。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/254900.html
微信扫一扫
支付宝扫一扫