考虑这个函数声明:
int IndexOf(const char *, char);
Run Code Online (Sandbox Code Playgroud)
其中char*是一个字符串,并在字符串中查找要查找的字符(如果未找到char,则返回-1,否则返回其位置).制作炭也有意义const吗?我总是尝试在指针参数上使用const,但是当通过值调用某些东西时,我通常会将const留下.
你的想法是什么?
假设您不打算调整任一参数的值:
我将函数定义为:
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
为什么?
const将标头和实现分开使我可以更改实现中的参数,而无需触摸标头(除了那些非常重要的参数const,这需要更改标头)。是否创建按值传递参数const对于影响函数的调用者而言“没有影响” - 这就是为什么您应该将它们保留在标头之外 - 但它们可以使您的实现更加健壮且更易于维护。
显然,如果更改参数比将其复制到另一个局部变量更有用,那么就不要const为了这样做而这样做。