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

以下代码将float类型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中不有效。

从C99标准, 6.5.4铸造操作员

  cast-expression: unary-expression ( type-name ) cast-expression 

C ++支持上面的转换forms以及函数样式转换。 函数样式转换就像调用类型的构造函数来构造对象。

查看使用C和C ++编译的以下块代码。

 #include  int main() { float f = 10.2; int i = int(f); printf("i: %d\n", i); } 

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

Working C ++程序: http : //ideone.com/bSP7sL

它是用C ++编写的。 但是虽然它是有效的,但C ++(与C相反)鼓励你的演员表达:

 auto i = static_cast(7.0); 

(哦,并使用类型安全流而不是容易出错的printf:

 std::cout << i << "\n";