识别隐式强制转换和显式强制转换

时间:2010-03-12 16:42:04

标签: c casting

如果有人能回答我的问题,我将不胜感激 识别隐式演员和显式演员吗?

int a = 2, b = 3;

float f = 2.5;
double d = -1.2;
int int_result;
float real_result;

4 个答案:

答案 0 :(得分:3)

从形式上看,这个问题从术语的角度来看是没有意义的。没有“隐性演员”这样的东西。术语 cast 的重点在于它指定了明确请求的转换。 Cast是(type)表单的运算符明确请求的类型转换。

在这种情况下,显式或隐式的内容称为转换。这可能是问题的作者可能意味着什么,但他们对C术语的知识不足搞砸了。

在您的代码示例中,只有一个初始化需要转换。当然,这种转换是隐含的,因为代码中没有强制转换

答案 1 :(得分:2)

根据定义,强制转换始终是明确的。隐含的是转换。当为对象分配的值不是对象的类型时,可能会发生以下两种情况之一:

  1. 值的类型与对象的类型“兼容”,即,标准允许这样的分配。然后,编译器为您进行转换。这称为隐式转换。例如,size_t i = -1;隐式转换int -1到size_t
  2. 否则,编译器必须在这种情况下发出诊断,并且您需要使用强制转换来执行分配。这种转换的结果是实现定义或未定义。
  3. 鉴于上述情况,you rarely need casts in C。您需要进行强制转换的次数之一可能是可变参数函数,因为编译器无法为您执行隐式转换。另一个例子是以实现定义的方式将整数转换为指针。

    再一次,没有隐式强制转换。

答案 2 :(得分:0)

嗯,这实际上是一个C类的家庭作业,并且在上面给出了第一行wirtten的一个例子答案,我没有在下面:这是,

int_result = a * f;
// a is casted implicitly to float by the multiplication operation a*f,
// the product is then casted implicitly to int by the = (assignment) operation.
real_result = a * f;
real_result = (float) a * b;
d = a + b / a * f;
d = f * b / a + a;
再次感谢,期待你的回复! :)

答案 3 :(得分:-1)

int a = 2,b = 3;

float f = 2.5;

双d = -1.2; //这是一个隐式演员。

int int_result;

float real_result;

上述陈述中没有明确的演员。