I already explained the benefits: the function makes a promise that you can rely on because the compiler enforces it. You don't have to worry about this function changing the data you give it.
The benefit of const correctness is that it prevents you from inadvertently modifying something you didn’t expect would be modified. You end up needing to decorate your code with a few extra keystrokes (the const keyword), with the benefit that you’re telling the compiler and other programmers some additional piece of important semantic information — information that the compiler uses to prevent mistakes and other programmers use as documentation. - https://isocpp.org/wiki/faq/const-correctness
A second benefit: const correctness widens the range of the function:
1 2 3 4 5 6 7 8 9 10 11 12
bool foo( char* cstr ) ;
bool bar( constchar* cstr ) ;
int main()
{
constchar hello[] = "hello world" ;
// foo(hello) ; // *** error: range of foo is restricted to modifiable (non volatile) c-style strings
bar(hello) ; // fine: range of bar is all (non volatile) c-style strings
}