Avatar ·

为什么在C++中应该使用static_cast<int>(x)而不是(int)x或int(x)?

你好!我最近开始学习C++,注意到在旧教材和论坛上经常使用这种类型转换语法: ```cpp double d = 3.14; int i = (int)d; // C-style cast // 或者 int j = int(d); // functional-style cast ``` 但后来我看到很多有经验的开发者这样写: ```cpp int k = static_cast(d); ``` 他们说这是“正确”的方式。我不太明白区别在哪里。毕竟结果都一样——小数部分被丢弃。为什么要写长长的`static_cast(x)`,如果可以直接写`(int)x`?这难道不是让代码变得臃肿吗? 我特别困惑以下几点: 1. 有没有情况是`(int)x`会做出意外的事情,而`static_cast`不会? 2. C-style cast真的更不安全吗?如果是,为什么编译器还允许它? 3. 这会影响性能还是只是风格问题? 希望能得到清晰的解释和例子,最好用实际代码来说明。