首页 > 学院 > 开发设计 > 正文

C风格转换一般应避免

2019-11-08 01:21:17
字体:
来源:转载
供稿:网友
在前面的第4.4节--隐式类型转换(强制)中,您了解到编译器有时会隐式地将值从一个数据类型转换为另一个数据类型。当您希望将一个数据类型的值提升到更大的类似数据类型时,使用隐式类型转换系统是很好的。许多新的程序员尝试这样的东西:浮点F = 10 / 4;。然而,因为10和4都是整数,没有晋升发生。整数除法在10 / 4上执行,产生值为2,然后隐式转换为2,并分配给f!如果您使用的是字面值(如10,或4),用浮点面值(或等于或10)替换一个或两个整数的文字值将导致两个操作数转换为浮点值,除法将使用浮点数学来完成。

但是如果你使用变量呢?考虑这种情况:

int i1 = 10;int i2 = 4;float f = i1 / i2;变量f将结束的值为2。我们如何告诉编译器,我们想使用浮点除法而不是整数除法?答案是使用类型转换操作符(通常称为一个转换)来告诉编译器做显式类型转换。一个铸造代表一个明确的要求由程序员做一个类型转换。型铸造在C++中,有5种不同类型的转换:C风格转换,静态模型,动态模型,并将const,reinterPRet cast。我们将在本课C风格转换和静态模型。动态转换将保存到覆盖指针和继承之后。const转换和reinterpret cast一般应避免因为他们在罕见的情况下才有用,可能是有害的如果使用不当。规则:避免const转换和reinterpret cast的除非你有一个很好的理由去使用它们。C风格转换在标准C语言编程中,转换是通过()运算符来完成的,将类型的名称转换为内部。例如:

123int i1 = 10;int i2 = 4;float f = (float)i1 / i2;因为C风格转换不在编译时由编译器检查,C风格转换可以是固有的滥用,因为他们会让你做的事情,可能是没有道理的,比如去掉const或更改数据类型不改变基本的表示(导致垃圾结果)。因此,C风格转换一般应避免。规则:避免C风格转换static_castC++引入了一个叫做static_cast铸造操作员。你以前见过用来转换为int,char,性病static_cast::cout打印而不是一个字符的整数:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表