Это может быть сделано, но не обязательно имеет большой смысл. Если вы возвращаете что-то по значению, то, что получает вызывающая сторона, является временной копией того, что вы возвратили, поэтому они все равно не могут ее изменить.
Это может иметь больше смысла, когда вы возвращаете ссылку; если (например) вы получили что-то по ссылке и вернули ссылку на то же самое, вы, вероятно, захотите подтвердить то, что вы возвращаете, если то, что вы получили, было подтверждено. Обычно это означает перегрузку вашей функции для константного / неконстантного параметра, каждый с совпадающим типом возврата.
Edit: Это может иметь дело с (например) проблемой, которая возникла в C с такими функциями, как strstr
и strchr
, которые принимают указатель с константной квалификацией, но возвращают указатель на те же данные (строку, в это случай) это не const-qualified. В C они образуют дыру в системе типов, где вы можете случайно изменить (или хотя бы попытаться) что-то, что должно было быть константным, без какого-либо (видимого) приведения.
char *s = strchr("Mystring", 'i');
*s = 'b'; // UB