制作char函数参数const?

hel*_*hod 5 c c++

考虑这个函数声明:

int IndexOf(const char *, char);
Run Code Online (Sandbox Code Playgroud)

其中char*是一个字符串,并在字符串中查找要查找的字符(如果未找到char,则返回-1,否则返回其位置).制作炭也有意义const吗?我总是尝试在指针参数上使用const,但是当通过值调用某些东西时,我通常会将const留下.

你的想法是什么?

DMA*_*361 4

假设您不打算调整任一参数的值:

我将函数定义为:

int IndexOf( const char * const , const char )
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

但保留函数声明为:

int IndexOf( const char * , char );
Run Code Online (Sandbox Code Playgroud)

换句话说:
我会在标头中显示的最低级别const,然后在实现中使用最大可能级别。const

为什么?

  1. const将标头和实现分开使我可以更改实现中的参数,而无需触摸标头(除了那些非常重要的参数const,这需要更改标头)。
  2. 它使代码更加自我记录。
  3. 如果编译器不将错误捕获为错误,则更难引入错误。
  4. 这使得其他程序员在将来进行更改时更难引入错误。

是否创建按值传递参数const对于影响函数的调用者而言“没有影响” - 这就是为什么您应该将它们保留在标头之外 - 但它们可以使您的实现更加健壮且更易于维护。

显然,如果更改参数比将其复制到另一个局部变量更有用,那么就不要const为了这样做而这样做。