c++ - C++中的strchr如何保证其调用者不会修改作为参数传递的字符串

标签 c++ c constants const-correctness

C语言中strchr的定义如下

char * strchr(const char *s, int c);

此声明向用户保证 strchr 不会修改“s”的内容(除非代码使用显式类型转换)。

从网上收集到的问题是,这个定义在返回指针时会强制转换“const”属性,因此在“C++”中,这不是“const 正确的”。

C++中的解决方案似乎是重载函数

const char * strchr ( const char * str, int character );
      char * strchr (       char * str, int character );

虽然这是“const safe”,但我无法理解第二个声明如何 char * strchr(char * str,int 字符) 向调用者保证不会修改其参数。

最佳答案

它没有做出这样的 promise 。恰恰相反,它为调用者提供了一种通过返回的指针修改字符串的方法。这就是为什么这个版本只能用非常量指针调用。

关于c++ - C++中的strchr如何保证其调用者不会修改作为参数传递的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31191686/

相关文章:

c - 使用指针交换对象

c - 在 C 中,fopen/fread/fgets PID 是安全的吗?

函数中的 C++ const 参数

c++ - 如果另一个指针指向它的引用,为什么 const int 不会被编译器(通过符号表)优化?

使用新线程的 C++ 调用函数,没有构造函数的实例与参数列表匹配

c++ - 如何使用 QtDesigner 将菜单栏添加到 QFrame?

c++ - C++ 中的矩阵与数组的数组及其动态分配

c++ - 在遗留代码上规避 RTTI

c - 这个C程序有什么问题?我总是出现一个我们没有输入的新数字?用Dev-C++编译

c - 为什么我们在用于内存测试的模式末尾找到 ULL?