我一直很好奇这一段时间现在也许我100%错了,但是当你将一种类型转换为另一种类型时它会查看内存/值然后将该内存/值视为新类型吗? / p>
例如:
char Letter = 'A';
int iLetter = static_cast<int>(Letter);
//iLetter is 65
如果这是正确的,它会查看“Letter”的内存位置/值,然后更改该值以表示您将其投射到的内容?我通过将所有值描述为整数然后被转换为char / struct / class等来实现这一理论。
希望这是一个完整的问题,我只是想要很好地理解投射如何与值/信息一起工作以将它们转换为新值等等。
答案 0 :(得分:3)
在转换值(而不是指针或引用)的情况下,编译器会从正在转换的值构造新值,而不是将现有位置解释为新类型。
具体来说,代码会查看Letter
的值char
,并通过将iLetter
扩展为{{1}来构建char
使用App Engine Java SDK。这可能包括签名类型的签名扩展,因此否定int
将成为否定signed char
。
另一方面,当您转换指针时,相同的位置将被解释为新类型。
答案 1 :(得分:1)
在您的情况下,static_cast使用新类型创建临时变量,然后在iLetter中设置它。
编辑: 这意味着static_cast不会改变主var类型并只读它。最后,它并没有直接将转换后的值放入iLetter中。它将使用新类型创建temp var,并将在iLetter中设置。
答案 2 :(得分:0)
你的演员正在做的是implicit conversion,这意味着演员阵容是多余的而且不需要,只需这样做:
int iLetter = Letter; //This is a safe conversion as well
如果这是正确的,它会查看“Letter”的内存位置/值
是。显然,查看Letter的值,如所看到的变量的值,否则编译器将不知道你在说什么。
- 然后更改值以表示您要将其投射到的任何内容?
原始值不会更改,只会复制,并且该值会转换为int
,以返回字符代码。