c++ - 这里的 const 变量有什么意义吗?
问题描述
#include <iostream>
int square(int const &i) {
return i * i;
}
int main() {
int side = 5;
std::cout << square(side) << "\n";
}
只是看一些代码,这是一个基本问题,但const
这里并没有真正做任何事情吗?我的意思是它确保我不能改变的价值,i
但我的意思是它有点没用,不是吗?
解决方案
我的意思是它确保我不能改变 i 的值
是的,这就是它的作用。
但我的意思是它有点没用不是吗?
在这个例子中它没有用,但是想象你的函数是 300 行而不是 1 行,并且由多个不同技能水平的程序员维护了几年。
在查看像这样的大函数中间的代码时,知道i
给定行上的值通常非常有用。如果i
已被标记为const
,那么很容易知道 的值i
保证等于传递给函数的值,因为编译器(或多或少)向您保证;如果函数前面的任何代码尝试为 分配不同的值i
,则该函数将不会编译。const
另一方面,如果没有标签,您将不得不手动阅读函数前面的所有代码,以“通过肉眼”验证这些代码没有分配不同的值i
,或者如果确实如此,在什么情况下可能发生以及它可能分配什么新价值。这是很多额外的程序员时间,而且这样的任务可能很容易错过。
因此,const
在某些情况下,标签可以为程序员节省大量时间。
第二个好处是,使用const
标签,您可以使用临时值作为参数调用函数,如下所示:
square(9)
...而没有const
上述内容将是编译时错误。(在这种情况下,您也可以通过将参数类型更改为 simpleint
或const int
而不是 来解决该错误int &
,但通常您经常希望通过引用传递以避免在函数调用期间不必要的对象复制)
推荐阅读
- asp.net-core - 无法在 ASP.NET Core Web API 中上传图像文件 - POST 方法
- reactjs - 如何删除产品已被选中
- c# - 我的带有 MySql 后端数据库代码的 C# 在 VS 2019 中运行良好,但编译后,可执行文件将在第一次查询时中断
- c# - 如何在 C# 中解析这个 jsonobject
- selenium - 尝试在詹金斯上运行硒时出现问题
- javascript - 如果 Javascript 中缺少对象键,则跳过未定义错误
- varnish - 无法将 Varnish 放在端口 80
- html - 使用 CSS 网格创建 3x3 响应式布局
- php - 如何使用php从字符串中获取年份
- javascript - 单击按钮时如何将多个值传递给模态?