如果我有这个代码:
int A;
unsigned int B;
if (A==B) foo();
编译器会提示比较中的混合类型。如果我像这样转换 A:
if ((unsigned int) A==B) foo();
这是否指示编译器插入代码以将 A 从 int 转换为 unsigned int?或者它只是告诉编译器不用担心,忽略类型不匹配?
更新:如果这是不安全的(如下所述),我应该如何处理这种比较? (将 int 的内容分配给 unsigned int 以供以后比较也是不安全的)
更新:哇,有一些不同的答案(来自拥有数千个帖子的人)。我已经接受了看起来最好的答案,但任何阅读此问题的人都应该仔细阅读所有答案。
最佳答案
在转换时,至少在概念层面上,编译器将创建一个在转换表达式中指定类型的临时变量。
您可以测试这个表达式:
(unsigned int) A = B; // This time assignment is intended
将生成一个错误,指向临时(常量)变量的修改。
当然,编译器可以自由地优化通过强制转换创建的任何临时变量。然而,必须存在一种有效的方法来构建临时的。
关于c++ - 在c++中强制转换是否改变变量,或者只告诉编译器它可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36182654/