我试图实现memchr()函数。我的代码必须返回一个void *,所以如果我们找到该角色,我们可以改变它。问题在这里。我有两种方法,一种方法是c_style。static cast或c style cast
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样式转换,这里我们发送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++教程,我正在尝试学习好的编码,但我有点困惑。
加上'const_cast' –
如果什么's1'原本指向常量数据?也就是说,不管你使用哪种风格,只要你想返回一个非const指针,你应该将's1'声明为非const指针。然后,你不需要'const_cast'。为了清楚起见,我会推荐C++风格的演员。 – cqdjyy01234
从输入中删除'const'限定符是不好的做法。如果你想在返回的指针处修改数据,那么把非const作为输入。或者更好地返回const指针并强制调用者明确移除'const'。 –