gpt4 book ai didi

c - 向不透明句柄添加 const-ness

转载 作者:太空狗 更新时间:2023-10-29 15:07:02 25 4
gpt4 key购买 nike

如果我创建了一个 C 模块,它向用户提供一个指向前向声明结构的句柄,如下所示:

typedef struct FOO_Obj *FOO_Handle;

如果我然后声明将其用作 const 限定参数的函数原型(prototype):

void FOO_work(const FOO_Handle fooHandle);

const 是如何应用的?

const struct FOO_Obj *FOO_Handle // A
struct FOO_Obj *const FOO_Handle // B
const struct FOO_Obj *const FOO_Handle // C

还是UB

最佳答案

B. (您提供的代码没有未定义的行为。)

函数调用

void FOO_work(const FOO_Handle fooHandle);

相当于

void FOO_work(struct FOO_Obj* const fooHandle);

函数中的变量fooHandle 将成为指向非常量struct FOO_Obj 对象的const 指针。您将无法将 const 限定符添加到 fooHandle 以使其成为指向 const 对象的指针。

相反,如果您想要一个指向常量对象的指针,并隐藏该结构,您必须创建另一个 typedef:

typedef const struct FOO_Obj* FOO_ConstHandle;

关于c - 向不透明句柄添加 const-ness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406719/

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