将函数指针作为函数参数时是否需要添加const修饰?
问题解答
第一个const的实际含义
你对这个const的理解完全错了。代码里的const int (*g) (const char x),第一个const是修饰函数g的返回值,意思是调用g(x)后得到的返回值是const int类型——简单说就是你没法直接给这个返回值赋值(比如写g(x) = 5;会被编译器报错)。
它和“能不能修改函数g的代码”一点关系都没有:函数的代码存在程序的代码段中,正常情况下本来就没法通过函数指针去修改,这个const根本管不到这事儿。
这类const是否属于良好编程实践
要分情况判断:
- 如果你的设计意图就是让函数g的返回值不允许被调用者修改,那加上这个
const是很靠谱的做法——既能明确接口的语义,让其他开发者一眼就懂返回值的使用限制,还能让编译器帮忙拦截那些试图修改返回值的错误代码。 - 如果函数g的返回值本来就是普通可修改的int(调用者拿到后可以随意赋值、参与计算),那加这个
const就纯属多余,反而会限制代码的正常使用,完全没必要。
内容的提问来源于stack exchange,提问作者Sasha
相关产品推荐
相关产品推荐

