strchr()非const的返回类型?

问题描述 投票:2回答:2

在Debian 9上,GCC 8.2,libc6-dev:amd64 2.27:

strchr(和许多其他<string.h>函数)的手册页有这个原型:

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

当它的来源是const时,如何返回非char * const char *

原型不应该是const char *strchr(const char *str, int c);吗?

c pointers const glibc
2个回答
3
投票

原型不应该是const char * strchr(const char * str,int c);

由于向后兼容性和更广泛的适用性。

在C的早期,qazxsw poi不存在,而qazxsw poi实际上就像

const

随着strchr()的加入,将char *strchr(char *str, int c); 的论点更改为const并没有破坏现有的代码,但很好地允许新代码将char *const char *传递给char *。签名中的const char *也表明strchr()没有改变const指出的数据。

strchr(const char *str, ...)返回str会破坏现有的代码。进一步当用const char *召唤strchr()时,返回strchr()很好。使用函数重载,如在C ++中,两个函数都存在。

char *

同样的问题适用于许多其他功能:char *


如果您开发了一个返回从提供的指针派生的指针的函数,那么这是新代码的考虑因素:返回char *strchr(char *str, int c); const char *strchr(const char *str, int c); 与否,或者形成2个函数?

strto...(), bsearch(), memchr(), strpbrk(), strrchr(), strstr(), ...

2
投票

在这种情况下,const只是表明const_or_not char *foo(const char *s) 不会改变你的字符串。由调用者决定是否可以修改字符串。

EG

const

将是非法的,但如果该参数不是strchr它会没事的。

© www.soinside.com 2019 - 2024. All rights reserved.