【发布时间】:2019-09-14 20:19:04
【问题描述】:
我面临一个函数,它接受一个指向 char 数组的指针,但它只对 char * 指向的内存执行读取操作。
我可以在 char * 参数之前直接将 const 添加到原型中,但这会破坏其余的非 const 正确代码。我决定添加注释 /*const*/ 来指示该函数仅执行读取操作。
但是,这让我的同事感到困惑,我想知道添加 cmets 是否是一种常见的方法,并且批评是不合理的。
例子:
int func(const char *readat);
对
int func(/*const*/ char *readat);
【问题讨论】:
-
修复非常量正确代码?
-
如果
func(const char *readat)而不是func(char *readat)破坏了现有代码,那么就不应该有const。 -
它以何种方式破坏了其余的“非 const 正确代码”?如果您想对您的 char 数组执行只读操作,那么使用 const 的方法非常好。但是,如果在您的函数内的其他任何地方操作此 char 数组,您可以考虑将此代码放在其他任何地方,因为从设计角度来看这没有意义。
-
非常量代码在哪里?
-
将非常量参数传递给采用
const参数的对象并不是错误,即func的调用者不会因添加const而中断。如果func本身调用了带有非常量参数的东西,并且您知道另一个函数实际上并没有修改它的参数,请添加const(如果可以的话),或者将参数转换为@987654336 @里面func(如果不能修改的话)。 (如果它确实修改了参数,那么const显然是不正确的,你不应该添加它或任何其他建议的评论。)
标签: c function constants const-correctness