在函数原型的char*param中添加/*const*/而不是const限定符
我面临一个函数,它接受指向在函数原型的char*param中添加/*const*/而不是const限定符,c,function,constants,const-correctness,C,Function,Constants,Const Correctness,我面临一个函数,它接受指向char数组的指针,但它只对char*指向的mem执行读取操作 我可以将const直接添加到char*参数之前的原型中,但这会破坏非const正确代码的其余部分。我决定添加注释/*const*/,以指示函数只执行读取操作 然而,这让我的同事们感到困惑,我想知道添加评论是否是一种常见的做法,而批评是没有道理的 例如: int func(const char *readat); 对 int func(/*const*/ char *readat); 将const添加到函
char
数组的指针,但它只对char*
指向的mem执行读取操作
我可以将const
直接添加到char*
参数之前的原型中,但这会破坏非const正确代码的其余部分。我决定添加注释/*const*/
,以指示函数只执行读取操作
然而,这让我的同事们感到困惑,我想知道添加评论是否是一种常见的做法,而批评是没有道理的
例如:
int func(const char *readat);
对
int func(/*const*/ char *readat);
将
const
添加到函数参数不会中断任何调用代码。允许将非常量对象分配给常量对象
所以这是允许的:
char c;
char *p = &c;
const char *cp = p;
但这不是:
char c;
const char *cp = &c;
char *p = cp;
修复非常量正确代码?如果
func(const char*readat)
而不是func(char*readat)
破坏现有代码,则不应存在const
。它以何种方式破坏其余的“非常量正确代码”?如果您想在char数组上执行只读操作,那么使用const的方法是非常好的。如果在你的函数中的任何其他地方,这个字符数组都被操作了,你可以考虑把这个代码放在其他地方,因为从设计的角度来看,这是没有意义的。非const代码在哪里?把一个非const参数传递给一个使用<代码> const 参数的东西不是错误的,即func
的调用者不会因为添加const
而中断。如果func
本身调用了采用非常量参数的某个函数,并且您知道另一个函数实际上没有修改其参数,则可以向其添加const
(如果可以),或者将参数强制转换为func
内部的const
(如果无法修改)。(如果它确实修改了参数,那么const
显然是不正确的,您不应该添加它或任何其他建议的注释。)