我的目标是为我的库定义一个干净的API。我的函数之一返回了一个指针,该指针不得使用指针算术进行修改。为此,我计划在函数原型中使用const
关键字。
这是一个简单的例子:
int global_var = 12;
int* const access_global_var(){ return &global_var;}
int main(void) {
int* const ptr = access_global_var();
*ptr = 15; //< Should be valid
ptr++; //< Should be Invalid
return 0;
}
它按预期工作:编译器在ptr++;
处引发错误。
问题:使用-Wextra
clang / gcc标志进行编译时,出现以下警告:
warning: 'const' type qualifier on return type has no effect
此警告正确吗?有什么我想念的吗?有没有更好的方法来实现我要完成的任务?正如警告在我的项目中被视为错误一样,这是有问题的。谢谢
函数的返回类型
int* const access_global_var(){ return &global_var;}
没有意义。
如果您在任何情况下都不能删除限定符const,例如,可能不会写
++access_global_var();
因为该函数返回一个右值。
但是即使您具有限定符const也可以编写
int *p = access_global_var();
然后
++p;
也就是说,您可以将一个常量值分配给一个非常量对象。
因此,编译器警告说,在返回类型中使用的限定符没有意义,可以在不更改,logic的情况下将其删除。