coercion - 其中哪一个是强制的例子

标签 coercion

一直在琢磨一道关于强制的选择题。 4 个示例 a、b、c 或 d 之一是强制转换的示例。我将其缩小为 A 或 B。但我在两者之间做出选择时遇到了问题。请有人解释为什么一个是强制,一个不是。

一个)

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) 被转换为一个 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 看起来都是正确的答案。那么为什么一个正确而另一个不正确。

最佳答案

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

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

虽然我可能是错的。

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

关于coercion - 其中哪一个是强制的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13792443/

相关文章:

r - 从 C/C++ 代码访问 "natural coercion"逻辑

read_excel 所有列文本

function - 显式转换涉及特定功能项类型的类型

c - `integer conversion rank` 定义不明确

c# - 在编译时强制进行狭窄的隐式强制转换

python - 在索引和插入行时防止强制 Pandas 数据帧

haskell - 显示与 unsafeCoerced 值一起使用时返回错误值

ocaml - 强制类型缩写记录

r - 给定条件强制字符串的函数

pointers - 为什么在 Rust 中访问指向结构的指针上的字段?