c++ - 在c++中强制转换是否改变变量,或者只告诉编译器它可以

标签 c++ casting compilation

如果我有这个代码:

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/

相关文章:

c++ - C++ 中的向上转型和向下转型

ios - 模拟器中的 libsqlite 和 iOS 编译

iphone - iPhone 的汇编 (.s) 代码中的条件编译 - 如何进行?

java - `if else` 和 `if-else if-else` 之间有区别吗?

c++ - 跨平台 Windows/OS X 开发,具有大量现有代码库

c++ - "Define"类构造函数中的成员函数

c++ - 何时以及如何决定是否使用 Actor 阵容?

c++ - 链表 - 移动到下一个节点

c++ - __vector_base_common 是怎么回事?

java - 在 Java 中使用流将 double[] 转换为 byte[]