Const (Member)

Specifies that a member procedure is read only.

Syntax
	KeyPgTypeType typename
		KeyPgDeclareDeclare Const KeyPgSubSub|KeyPgFunctionFunction|KeyPgPropertyProperty|KeyPgOperatorOperator ...
	End Type

	[Const] KeyPgSubSub|KeyPgFunctionFunction|... typename ...
		...
	End KeyPgSubSub|KeyPgFunctionFunction|...

Description
	Specifies that a method does not change the object it is called on. The 
	hidden KeyPgThisThis parameter will be considered read-only. The declaration can 
	be read as 'invoking a const method promises not to change the object', 
	and the compiler will error if the member procedure tries to change any 
	of the data fields, or calls a non-const member procedure. 

	Read-only (Const) declarations are a measure of type safety that can be 
	read as 'promises not to change.'  The compiler uses the const 
	declarations to check operations on variables and parameters and 
	generate an error at compile time if their data could potentially 
	change.  There is no runtime overhead for using Const qualifiers since 
	all of the checks are made at compile time.

	Constructors and destructors cannot be Const (not useful).
	Member procedures can not be both Const and KeyPgStaticMemberStatic since static member 
	procedures do not have a hidden KeyPgThisThis parameter.

	For methods with Const in their declaration, Const can also be specified 
	on the corresponding method bodies, for improved code readability.

Example
	'' Const Member Procedures

	Type foo
	  x As Integer
	  c As Const Integer = 0
	  Declare Const Sub Inspect1()
	  Declare Const Sub Inspect2()
	  Declare Sub Mutate1()
	  Declare Sub Mutate2()
	End Type

	''
	Sub foo.Mutate1()
	  '' we can change non-const data fields
	  x = 1

	  '' but we still can't change const data
	  '' fields, they are promised not to change
	  '' c = 1 '' Compile error

	End Sub

	''
	Sub foo.Mutate2()
	  '' we can call const members
	  Inspect1()

	  '' and non-const members
	  Mutate1()

	End Sub

	''
	Sub foo.Inspect1()
	  '' can use data members
	  Dim y As Integer
	  y = c + x

	  '' but not change them because Inspect1()
	  '' is const and promises not to change foo
	  '' x = 10 '' Compile error

	End Sub

	''
	Sub foo.Inspect2()
	  '' we can call const members
	  Inspect1()

	  '' but not non-const members
	  '' Mutate1() '' Compile error

	End Sub

Differences from QB
	* New to FreeBASIC

See also
	* KeyPgConstConst
	* KeyPgConstQualifierConst (Qualifier)
	* KeyPgDimDim
	* KeyPgTypeType

