Avatar ·

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

Olá! Comecei a estudar C++ recentemente e notei que em livros antigos e fóruns frequentemente usam esta sintaxe para conversão de tipos:\n\n```cpp\ndouble d = 3.14;\nint i = (int)d; // C-style cast\n// ou\nint j = int(d); // functional-style cast\n```\n\nMas depois vi que muitos desenvolvedores experientes escrevem assim:\n\n```cpp\nint k = static_cast(d);\n```\n\nE dizem que esta é a forma "correta". Não entendo bem qual é a diferença. Afinal, o resultado é o mesmo em todos os casos — a parte fracionária é descartada. Por que escrever um `static_cast(x)` longo, se posso simplesmente escrever `(int)x`? Isso não é apenas inflar o código?\n\nFico especialmente confuso com os seguintes pontos:\n1. Existem casos onde `(int)x` faria algo inesperado, mas `static_cast` não?\n2. É verdade que o C-style cast é menos segu