gpt4 book ai didi

c++ - 使用 static_cast 时指向 const 指针的原因

转载 作者:搜寻专家 更新时间:2023-10-31 00:06:22 24 4
gpt4 key购买 nike

我试图解决书中的一个练习,但我在 static_cast 上失败了。我用了qsort来自 cstdlib 的方法。我必须将函数的参数转换为 C 字符串 (const char*)。但我总是收到错误消息:stattic_cast from type 'const void*' to type 'const char**' casts away qualifiers。

int scmp(const void *s1, const void *s2) {
const char *c1 = (static_cast<const char**>(s1));
const char *c2 = (static_cast<const char**>(s2));
....
}

const char *sfield[] = {"one", "two", "three", "four", "five"};
qsort(sfield, 10, 4, scmp);

解决方法如下

const char *c1 = *(static_cast<const char* const*>(s1));

最后一个const是什么原因,从哪里来的?为什么我必须将指针转换为指向 char const 的常量指针?

最佳答案

它来自原点指针。 static_cast 可能不会丢弃 const 限定符。所以你只能将 void const* 转换为 T const*

现在,您的 T 恰好是 char const*。您可能被原始代码中的前导 const 引入歧途。它不适用于人们可能认为适用的地方。

关于c++ - 使用 static_cast 时指向 const 指针的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58112435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com