C/ c++中的显式类型转换操作符

Explicit type casting operator in C/C++

本文关键字:类型转换 操作符 c++      更新时间:2023-10-16

下面的代码将浮点类型7.5转换为整数值7,其余部分丢失。这里,类型转换操作符是int。我知道它在c++中是有效的类型转换。

int main()
{
        int i;
        float f = 7.5;
        i = (int) f; // Valid in C/C++
}

但是在C/C++中做同样事情的另一种方法是使用函数符号在要通过类型转换的表达式之前并将表达式括在括号之间:

i = int (f); // It is worked in C++ but not C

所以,我有一个问题,它是有效的方式来类型转换在c++ ?

i = int (f);

在c++中有效,但在C中无效。

6.5.4强制转换操作符
 cast-expression:
      unary-expression
      ( type-name ) cast-expression

c++支持上述形式的类型转换以及函数样式类型转换。函数类型强制转换就像调用一个类型的构造函数来构造一个对象。

查看下面用C和c++编译的块代码。

#include <stdio.h>
int main()
{
   float f = 10.2;
   int i = int(f);
   printf("i: %dn", i);
}

不工作的C程序:http://ideone.com/FfNR5r

工作c++程序:http://ideone.com/bSP7sL

它是用c++编写的。但是,尽管它是有效的,c++(与C相反)鼓励在类型转换中使用显式:

auto i = static_cast<int>(7.0);
哦,使用类型安全的流,而不是容易出错的printf:
std::cout << i << "n";