首页 > 解决方案 > 这里的 const 变量有什么意义吗?

问题描述

#include <iostream>

int square(int const &i) {    
  return i * i;
}

int main() {   
  int side = 5;
  std::cout << square(side) << "\n"; 
}

只是看一些代码,这是一个基本问题,但const这里并没有真正做任何事情吗?我的意思是它确保我不能改变的价值,i但我的意思是它有点没用,不是吗?

标签: c++

解决方案


我的意思是它确保我不能改变 i 的值

是的,这就是它的作用。

但我的意思是它有点没用不是吗?

在这个例子中它没有用,但是想象你的函数是 300 行而不是 1 行,并且由多个不同技能水平的程序员维护了几年。

在查看像这样的大函数中间的代码时,知道i给定行上的值通常非常有用。如果i已被标记为const,那么很容易知道 的值i保证等于传递给函数的值,因为编译器(或多或少)向您保证;如果函数前面的任何代码尝试为 分配不同的值i,则该函数将不会编译。const另一方面,如果没有标签,您将不得不手动阅读函数前面的所有代码,以“通过肉眼”验证这些代码没有分配不同的值i,或者如果确实如此,在什么情况下可能发生以及它可能分配什么新价值。这是很多额外的程序员时间,而且这样的任务可能很容易错过。

因此,const在某些情况下,标签可以为程序员节省大量时间。

第二个好处是,使用const标签,您可以使用临时值作为参数调用函数,如下所示:

square(9)

...而没有const上述内容将是编译时错误。(在这种情况下,您也可以通过将参数类型更改为 simpleintconst int而不是 来解决该错误int &,但通常您经常希望通过引用传递以避免在函数调用期间不必要的对象复制)


推荐阅读