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.