提问人:Sasha 提问时间:9/15/2023 更新时间:9/15/2023 访问量:48
函数指针作为函数参数 - 应该常量吗?[复制]
a function pointer as a function paramter - should one const it? [duplicate]
问:
如果我写如下:
int f(char x, const int (*g) (const char x)) {
return g(x);
}
第一个是否有效地表达了我认为它所说的,即基本上程序员不能更改函数 g 的代码?所以基本上,在传递函数指针作为参数时,把这些 s 放在一个好的做法是什么?const
const
答:
1赞
Ted Lyngmo
9/15/2023
#1
第一个声明返回的不可变 - 但这无关紧要,因为接收器会将其复制到非 - 如果需要的话 - 这正是您的函数所做的。它调用声明返回 a 但返回 .第一个将被忽略。const
int
const
int
f()
g()
const int
f()
int
const
它与更改 的代码无关。这在任何情况下都是不允许的。g()
如果你想明确函数指针不会指向里面的另一个函数:f
int f(char x, int (*const g) (const char x))
评论
0赞
Sasha
9/15/2023
哦,谢谢你,我明白了。第一个 const 指的是 int,而不是函数指针参数;因此,如果我说对了,函数指针就无法固定,因为无论如何我们都无法修改它们的取消引用......
1赞
Ted Lyngmo
9/15/2023
@Sasha 几乎正确。您可以创建指针本身,以便无法在函数中更改它。我在答案中添加了这样的声明。const
0赞
tstanisl
9/15/2023
请注意,在推断参数类型时,第二个常量也会被忽略g
0赞
Sasha
9/16/2023
@TedLyngmo 谢谢。虽然,在实践中这样做似乎毫无用处,不是吗?查看声明的“API 用户”应该并不真正关心我是否出于某种原因为了方便而更改了函数中的指针。
评论
const
int (*const g)(char)
int f(char x, func_t* func);