В комментарии к одному из других ответов вы сказали:
const char * sm означает, что я могу передать
const или не const, так почему C ++
преобразует это автоматически? Тот
не имеет смысла для меня.
Между вашим первоначальным вопросом и тем комментарием, я думаю, вы неправильно понимаете, как компилятор обрабатывает типы.
Вы правы, что неконстантный char *
можно безопасно привести к const char *
. Тем не менее, ваш метод явно принимает const char *
. Таким образом, хотя вы можете передать char *
в функцию, компилятор просто автоматически приводит аргумент при вызове функции. Фактический код в функции не знает, был ли исходный аргумент постоянным или нет. Компилятор должен идти по фактическому объявлению переменной, которую вы используете, , а не некоторой предыдущей переменной, которая имела то же значение.
Если вы хотите иметь возможность обрабатывать неконстантные char *
переменные по-разному (присваивая их), тогда вам нужно определить функцию, которая принимает неконстантные char *
переменные.