静态演员或c风格演员

时间:2016-01-22 01:19:05

标签: c++ memory

我正在尝试实现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 ++教程,我正在努力学习良好的编码,但我有点困惑。

1 个答案:

答案 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;
}