什么是const指针的要点?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我不是在谈论const指针的指针,而是指向const指针本身。

我正在学习C和C ++,超越了基本的东西,直到今天,我才意识到指针是按值传递给函数的,这很有道理。这意味着在一个函数中,我可以使复制的指针指向某个其他值,而不影响来自调用者的原始指针。

那么有一个功能标题说什么?

void foo(int* const ptr);

在这样的函数内部,你不能让ptr指向别的东西,因为它是const的,你不希望它被修改,但是像这样的函数:

void foo(int* ptr);

工作也一样!因为无论如何都会复制指针,即使你修改副本,调用方中的指针也不会受到影响。那么const的优点是什么?

提问于
用户回答回答于

const 是一个你应该用来追求非常重要的C ++概念的工具:

通过让编译器执行你的意思,在编译时查找错误,而不是运行时。

即使它没有改变功能,const但当你正在做你不想做的事情时,添加会产生一个编译器错误。想象下面的错字:

void foo(int* ptr)
{
    ptr = 0;// oops, I meant *ptr = 0
}

如果你使用int* const,这会产生一个编译器错误,因为你正在改变它的值ptr。通过语法添加限制通常是件好事。只是不要太过分 - 你给的例子是大多数人不打扰的情况const

用户回答回答于

我着重指出 使用const参数,因为这会启用更多的编译器检查:如果我意外地在函数内重新分配参数值,编译器会咬我。

我很少重用变量,创建新变量来保存新值更清晰,所以基本上我所有的变量声明const(除了某些情况下,例如const阻止代码运行的循环变量)。

请注意,这只对函数的定义有意义。它不属于声明,这是用户看到的。用户不关心我是否使用const函数内的参数。

例:

// foo.h
int frob(int x);
// foo.cpp
int frob(int const x) {
   MyConfigType const config = get_the_config();
   return x * config.scaling;
}

注意参数和局部变量都是如何的const。这两者都不是必要的,但功能甚至稍大一些,这使我不再犯错误。

扫码关注云+社区