我正在尝试实现memchr()函数。我的代码必须返回一个void *,所以如果我们找到该字符,我们就可以改变它。问题出在这里。我有两种方法,一种方法是c_style。
void *memChr(const void *s1, int c, size_type n)
{
const char *p = (const char *)s1;
while (n--)
if (*p++== (char)c)
return (void *)--p;
return 0;
}
这些方法使用c-style强制转换,这里我们将s1作为const发送,这是正确的原因我们不想要任何改变,然后我们将p作为非const指针返回到void,这又是正确的。这是旧的,我想要更多的c ++方法。像这样:
void *memChr( void *s1, int c, int n)
{
char *p = static_cast< char *>(s1);
while (n--)
if (*p++ == static_cast<char>(c))
return static_cast<void *>(p);
return 0;
}
我对这些代码的问题是这样的:我不能将const指针强制转换为非常量指针.static_cast比c样式转换更安全,但它使我使用非const参数,这是不合适的。使用标准的memchr()参数,无法使用static_cast实现。 那么哪种方法更好?我刚刚完成了c ++教程,我正在努力学习良好的编码,但我有点困惑。
答案 0 :(得分:0)
您可以使用const_cast从const转换为非const指针:
void *memChr( const char *s1, int c, int n)
{
char *p = const_cast< char *>(s1);
while (n--)
if (*p++ == static_cast<char>(c))
return static_cast<void *>(p);
return 0;
}