Avatar ·

Por que usar static_cast<T>(x) em vez de (T)x ou T(x) em C++?

Olá a todos! Comecei a estudar C++ recentemente e notei que em alguns livros e fóruns recomendam usar `static_cast(x)` em vez da antiga conversão estilo C `(int)x` ou da forma funcional `int(x)`. Sinceramente, isso me parece uma complicação desnecessária. Afinal, `(int)x` é mais curto e mais claro, especialmente quando você só precisa converter um double para int ou algo assim.\n\nAqui está um exemplo que escrevo com frequência:\n\n```cpp\ndouble pi = 3.14159;\nint truncated = (int)pi; // ou int truncated = int(pi);\n```\n\nPor que eu deveria escrever `static_cast(pi)` se o resultado é o mesmo? Dizem que static_cast é mais seguro, mas não entendo qual é a diferença. A conversão estilo C não faz a mesma coisa? Ou existem algumas armadilhas que eu não conheço? Talvez haja casos em que `(