【问题标题】:Adding /*const*/ instead of const qualifier to char * param in function prototype在函数原型中的 char * 参数中添加 /*const*/ 而不是 const 限定符
【发布时间】: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


【解决方案1】:

在函数参数中添加const 不会破坏任何调用代码。允许将非 const 对象分配给 const 对象。

所以这是允许的:

char c;
char *p = &c;
const char *cp = p;

但这不是:

char c;
const char *cp = &c;
char *p = cp;

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2014-02-19
    相关资源
    最近更新 更多