请有人详细说明一下它们的区别吗?
区别在于(int)foo可能意味着半打不同的含义。 它可能是一个static_cast(在静态已知类型之间进行转换),也可能是一个const_cast(添加或删除const性质),或者可能是一个reinterpret_cast(在指针类型之间进行转换)。
编译器会尝试每个选项,直到找到可行的选项。这意味着它可能并不总是选择您期望的选项,因此它可能成为微妙的错误源。
此外,使用static_cast更容易搜索或执行搜索/替换。
(int) foo 最相似于 c++ 的 reinterpret_cast<int>
,即没有对转换的有效性进行检查。