3

我一直在思考关于强制的多项选择题。4 个示例 a、b、c 或 d 之一是强制示例。我将其缩小到 A 或 B。但我在两者之间进行选择时遇到了问题。甘蔗有人请解释为什么一个是强制而一个不是。

一个)

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

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

二)

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

我还认为 B 是正确的答案,因为双 (x+y) 正在变成一个 int 以放置在 i 中。但我认为这可能是错误的,因为它是通过使用 (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 看起来都是正确的答案。那么为什么一个正确而另一个不正确。

4

2 回答 2

0

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

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

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

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

我认为 A 是最直接的强制示例。尽管 C 的 cout 声明似乎也很可疑。

于 2012-12-09T22:45:43.947 回答
0

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

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

不过我可能是错的。

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

于 2012-12-09T22:48:50.200 回答