在c++中声明一个变量常量有什么意义
What is the point of declaring a variable constant in c++
可能重复:
const(c++)是可选的吗?
在c++或任何编程语言中,声明变量const或常量有什么意义?我理解const的作用,但声明所有内容都不是常量不是更安全吗?因为程序员不知道是否要更改变量吗?我只是看不出const的目的。
如果程序员(或编程团队)能够成功地跟踪每个变量的每个细节,并且不会意外地为常量赋值,那么无论如何都不要声明常量const
。
在语言中添加const
有助于防止容易预防的错误,而不像恐龙时代的语言那样会发生邪恶的事情。
这是我曾经在一个巨大的FORTRAN77应用程序中追踪到的一个错误的近似值。FORTRAN 77通过引用传递参数,除非采取特殊措施:
subroutine increment(i)
integer i
i = i + 1
end
subroutine process ()
call increment (1)
call someprocedure (1, 2, 3)
...
结果是用(2,2,3)调用了someprocedure()
!
但是,因为程序员不知道是否要更改变量,所以声明所有内容都不是常量不是更安全吗?
这完全是错误的。确保本应为常数值的值不会被错误地更改是"更安全的"。它向未来可能偶然发现它的所有程序员传达了价值的意图。如果一个程序假设一个值永远不应该改变,那么为什么允许它改变呢?这可能会导致很难追踪到错误。
不要想当然地认为你的程序是正确的,使用你的语言提供的实用程序(尽可能地)使它正确。大多数现实世界中的项目都不是由一个人坐在地下室里完成的。它们涉及多个程序员,将被维护多年,通常由一群与初始版本无关的人维护。
请不要让我或其他人猜测你的设计决定是什么,尽可能明确。见鬼,当你回到一个已经有一段时间没有接触过的程序时,即使你也会忘记你在想什么。
因为程序员不知道是否要更改变量吗?
没有。您将为其他程序员编写大量代码。他们可能想要改变这个值。
也许,你犯了一个错误,无意中改变了值。如果是const,它不会让你这么做的。Const对于重载运算符也非常有用。
是的,当你说基本思想是确保常量变量防止编程错误时,你是对的。但是一个额外的用途是,您提供给客户端的接口还可以确保您想要的常量保持不变!它可以防止使用您的代码的人违反约束。
这将派上用场,尤其是在OOP中。通过确保您的对象是const,您可以编写大量代码,而不用担心后果。这些对象可以由新程序员使用,也可以由必须保留该属性的客户端使用。Const迭代器也非常方便。
这个链接应该可以帮助您完成
const帮助编译器优化代码。Temporaries必然是const引用。因此,临时工的使用寿命可以使用const增加一点。
在web编程中,可以通过注入来更改变量(有时是恶意的)。
当您可能不小心更改了变量,但提前知道这是不希望的时,这也会有所帮助。
在编写大型程序时,常量很有用,因为您可能会迷失方向,忘记变量(或常量)的作用,或者是否允许更改其值。
此外,更重要的是,它在团队合作和为他人编写图书馆方面很重要。如果您为其他人编写代码,他们可能会更改您打算使用常数值保留的变量,因此将其声明为常量非常有用。
当您想在只允许使用常量的地方使用相同的数字时,这也很有用,例如,delcare静态数组。在这种情况下,你不能用变量来确定数组的大小,而且每次你想改变数组的大小时,都要查看所有代码并更改数字,这非常烦人,所以将数字声明为常数非常有用,我真的有过这样的经验。
希望这是令人信服的,这就是我现在所记得的,如果我还记得其他事情,我会回来编辑。
有一个很好的编程:)
- 通过多个头文件使用常量变量
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 非常量变量只读位置的赋值
- 使用大量已知常量变量的正确方法
- 无法在具有常量变量大小的类中创建堆栈分配数组
- 这些语句是否等效(静态变量、常量变量和泛型)
- 包含常量变量并包含在多个文件中的标头的链接错误
- 我们如何修改常量变量的值
- 如何在模板类中设置静态常量变量
- 为什么常量变量是模板特殊化所必需的,而不是常量
- 如何在函数中传递常量变量?
- 定义常量变量的最佳方法
- C++ 声明常量变量,但推迟其初始化?
- 如何初始化具有常量变量的结构数组
- 使用常量变量作为维度将矩阵声明为类成员时出现编译器错误
- 使用指针 c++ 更改常量变量
- c++ 类中的静态常量变量和常量变量在存储方面是否有区别
- 为什么 lambda 对象中的局部变量是常量变量?
- 使用常量变量作为数组的大小
- 为许多类可能需要的所有常量变量制作独立的头文件是否是一种很好的做法?