为什么在cstring.h中没有在strcmp中使用常量指针

Dav*_*can 2 c++ string const

在cstring.h文件中存在一个函数:

int strcmp ( const char *s1, const char *s2 ),但为什么只有数据是常量,使指针和数据都不变更安全.在我看来,正确的函数版本应该是这样的:

int strcmp ( const char * const s1, const char * const s2 )
Run Code Online (Sandbox Code Playgroud)

fre*_*low 7

参数的顶级const修饰符将从声明中删除,因为它们与客户端无关.参数是否更改是实现细节.声明函数为完全有效void f(int x),然后将其定义为void f(const int x)(反之亦然).

在你的榜样,即使s1s2在里面修改strcmp,客户端不会注意到这些修改,因为指针是按值(复制到功能)通过.也就是说,如果你打电话strcmp(a, b),然后ab将保留它们的值,即使str1str2被改变.

  • 客户端不需要知道(并且无法知道)`s1`和`s2`是否在`strcmp`中被修改.添加`const`是没有意义的.无论如何,编译器将其剥离. (2认同)