Avatar ·

O const nos parâmetros de função afeta a assinatura e o comportamento em C++?

Olá a todos! Comecei a estudar C++ e me deparei com uma situação confusa. Quando escrevo funções, frequentemente uso const para parâmetros, a fim de garantir que eles não sejam modificados dentro da função. Por exemplo: ```cpp void print(const std::string& str) { std::cout << str << std::endl; } ``` Mas recentemente notei que, se eu declarar uma função sem const, mas com o mesmo nome e tipos, o compilador não considera isso uma sobrecarga: ```cpp void print(const std::string& str) { /* ... */ } void print(std::string& str) { /* ... */ } // Isso é sobrecarga void print(std::string str) { /* ... */ } // E isso é erro ou não? ``` Por que isso acontece? Afinal, const no parâmetro é parte do tipo. Mas ouvi dizer que, para parâmetros passados por valor, const não afeta a assinatura. Isso é verdade? E, no geral, há algum sentido prático em usar const para parâmetros, se eles não participam da sobrecarga? Talvez seja apenas estilo de codificação ou o compilador realmente otimiza algo? Ficarei grato.