C ++ - 转换变量以及如何处理它们?

时间:2016-09-09 00:33:05

标签: c++ memory casting

我一直很好奇这一段时间现在也许我100%错了,但是当你将一种类型转换为另一种类型时它会查看内存/值然后将该内存/值视为新类型吗? / p>

例如:

char Letter = 'A';
int iLetter = static_cast<int>(Letter);
//iLetter is 65

如果这是正确的,它会查看“Letter”的内存位置/值,然后更改该值以表示您将其投射到的内容?我通过将所有值描述为整数然后被转换为char / struct / class等来实现这一理论。

希望这是一个完整的问题,我只是想要很好地理解投射如何与值/信息一起工作以将它们转换为新值等等。

3 个答案:

答案 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,以返回字符代码。