将 API 函数参数从 'char *' 更改为"const char *"有哪些潜在问题?
What are the potential issues with changing an API function parameter from 'char *' to 'const char *'?
如果我有这样的 API 函数声明:
void fn(char * s);
我在以后的修订版中将其更改为:
void fn(const char * s);
这会破坏二进制兼容性吗?这会破坏以前有效的东西吗?这种类型的更改有什么问题吗?
请注意,即使在第一次修订中,该参数也始终被视为常量。
如果函数被声明为 extern "C",它可能无关紧要,如果不是,则可能无关紧要。
对于C++函数,参数类型是签名的一部分,因此对于采用const char *
的函数和采用简单char *
的函数,损坏的名称将不同。并且由于该名称解析将失败,而无需重新生成代码。
但是,C 不对参数类型进行编码,因此无论哪种方式,名称都是相同的。
在任何一种情况下,实际代码都可能是相同的,与const char *
相比,它是一个char *
的事实不会改变元素的访问方式。
void fn(char * s)
和void fn(const char * s)
在C++中是完全不同的函数。这与更改其名称相同。您绝对应该保存旧的,但将其重定向到新的。
struct silly{
operator char*()const{ return 0;}
operator char const*() const{ return "hello"; }
};
相关文章:
- 构造函数 (C++) 中的 char 指针参数存在问题
- 没有'str'成员在 GCC 和 Clang 'std::basic_ostream<char>',但 MSVC 没有问题
- 通过指针使用C++还原char数组时出现问题
- "char(a)" C++的问题
- 愚蠢的问题:strcat和char指针
- 语法问题:"char [5] const &"是什么意思?
- 如何将char数组声明为函数参数?或告诉我此代码中还有其他问题?
- Char 数组的问题,如何正确构造和显示它们
- 使用C ,将转换为char的问题始终具有3位数字
- 将 char* 推送到矢量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到矢量中
- char,const char*阵列问题,用于mqtt client.publish
- 以C++语言打印 CHAR 数组时出现问题
- 将 API 函数参数从 'char *' 更改为"const char *"有哪些潜在问题?
- 接受类型char的输入的问题
- 有人能解释一下getline和char的问题吗
- Windows 10中的Char*的内存分配问题
- 将 char * 与字符串文本进行比较时出现问题
- 正在将文件转换为char*问题
- c++中的char*问题
- 从'int'到'const char*'问题C++的转换无效