以下代码将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 ++中进行类型转换是否有效?
答案 0 :(得分:2)
它是在C ++中。但是虽然它是有效的,但C ++(与C相反)鼓励你的演员表现出明确性:
auto i = static_cast<int>(7.0);
(哦,使用类型安全流而不是容易出错的printf:
std::cout << i << "\n";
答案 1 :(得分:2)
i = int (f);
在C ++中有效,但在C中无效。
根据C99标准, 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: %d\n", i);
}
非工作C程序:http://ideone.com/FfNR5r
使用C ++程序:http://ideone.com/bSP7sL