其中一个是强制的例子

时间:2012-12-09 22:18:57

标签: coercion

我一直在思考强制性的多项选择问题。 a,b,c或d的4个例子中的一个是强制的一个例子。我把它缩小到A或B.但我在选择两者之间遇到了问题。有人请解释为什么一个是强制而另一个不是。

A)

string s="tomat";
char c='o';
s=s+c;

我认为A可能是正确的,因为我们有两种不同的类型,字符和字符串,被添加。这意味着c被提升为字符串,因此被强制。

B)

double x=1.0;
double y=2.0;
int i=(int)(x+y);

我还认为B是正确的答案,因为double(x + y)被转换成一个放在i中的int。但我认为这可能是错误的,因为它是通过使用(int)而不是被动地主动完成的,例如“int i = x + y”

我会列出其他两个选项,即使我认为这两个选项都不正确

C)

char A=0x20;
A = A << 1 | 0x01;
cout << A << endl;

d)

double x=1.0;
double y=x+1;
return 0;

我不只是在寻找答案,而是一个解释。我已经阅读了大量关于强制的事情,A和B看起来都是正确的答案。那么为什么一个是正确的而另一个没有。

2 个答案:

答案 0 :(得分:0)

我认为类型转换不等同于类型强制,这就是为什么A可能是正确的答案。

B取一个double并将其强制转换为int,这更像是转换而不是强制转换。在A中你没有转换任何你隐含的东西。你告诉运行时/编译器/“这两个东西是相似的,你能弄清楚如何连接它们吗?”

C不是转换或强制它只是位移位。虽然cout可能是胁迫......我不确定是否有强制写入控制台的字符串。

D可能包含强制,因为1是一个int,你将它添加到double。但是,您可以使用具有小数的整数进行浮点数学运算。

我认为A是强制最直接的例子。虽然C的cout陈述似乎也很可疑。

答案 1 :(得分:0)

我实际上认为它是B.即使有明确的(int),它仍然是类型强制(只是不是自动类型强制)。您将浮点值(可能存储为IEEE浮点值)转换为整数值(可能存储在二进制补码中)。

而A只是将一个字符串联到一个字符串,其中一个字符串只是一个空终止的字符数组。那里没有数据类型转换,只是一些内存操作。

我可能错了。

编辑:我不得不同意帕里斯。鉴于这是一个C ++字符串而不是C字符数组(我的错误),A中的字符可能被强制转换为字符串。