gpt4 book ai didi

C++ 语法 : Constant Reference Parameter

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:35 25 4
gpt4 key购买 nike

请解释下面代码中的const void *a, const void *b。这些是常量引用参数——意味着这个函数的内部代码不能改变它的值吗?为什么要将这些参数作为引用?认为引用参数意味着按值传递并允许在函数定义内更改值。为什么使用 void 作为参数参数?

int peak_compare(const void *a, const void *b)  //Function peak_compare
{
Peaks *aa = (Peaks *)a;
Peaks *bb = (Peaks *)b;

if(aa->wt1 > bb->wt1) return -1;
if(aa->wt1 == bb->wt1) return 0;
return 1;
}

感谢您的任何建议。

最佳答案

const typename * pPointer to Constant 的语法。这意味着,您不能更改函数中的值。

typename * const p常量指针 的语法。这意味着您不能在函数中更改指针本身。

在上面的示例中,typename 可以是从标准类型到用户定义类型,再到 void 的任何内容。如果它是一个 void,其意图是该函数可能会获得指向不同类型的指针。您应该正确地将 void 指针转换为正确的类型,以便访问其成员,在您的情况下,以下几行正在执行:

Peaks *aa = (Peaks *)a;
Peaks *bb = (Peaks *)b;

但是这个转换失去了常量性。正确的语法应该是:

const Peaks *aa = (const Peaks *)a;
const Peaks *bb = (const Peaks *)b;

不要丢失常量值。


编辑:正如其中一条评论所指出的那样,由于该问题仅用 C++ 标记,因此最好以 C++ 样式进行转换,如下所示:

const Peaks* aa = static_cast<const Peaks*>(a);
const Peaks* bb = static_cast<const Peaks*>(b);

关于C++ 语法 : Constant Reference Parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15416269/

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