Cast

Converts an expression to a specified data type

Syntax
   Cast( datatype, expression )

Parameters
   datatype 
      a built-in data type (standard type)
   expression 
      a variable of another built-in data type

Description
   Converts expression into a different datatype. Useful to be used in 
   macros when datatype is unknown and also when converting to Type Alias.

   This is a general form of conversion operators such as CInt or CDbl.
   Cast is more versatile because it can be used on built-in types that 
   have a built-in Cast Operator, but don't have a built-in keyword for it: 
   e.g. Cast( Byte, boolean ).
   It is also suitable for use in cases where the type of a variable is not 
   fixed in the code - for example, it might be Defined earlier, or may be 
   the Type Of a different variable or expression.

   Note: If you want to use an operator specifically for converting to 
   different types of Pointers, consider using CPtr instead.

   Upcasting: In an inheritance structure, the upcasting is converting a 
   derived type reference or pointer into a base type.
   In this special use, Cast applied on a derived-type instance (expression
   ) can be used to return a base-type (datatype) reference.

   By using a member Operator Cast, Cast can be overloaded for a user 
   defined type expression.
  
Example
   '' will print -128 because the integer literal will be converted to a signed Byte
   '' (this Casting operation is equivalent to using CByte)
   Print Cast( Byte, &h0080 )

   '' will print 3 because the floating-point value will be converted to an Integer
   '' (this Casting operator is equivalent to using CInt)
   Print Cast( Integer, 3.1 )

   Sleep

   '' macro sizeofDerefPtr(): returns the size of the dereferenced pointer
   #define sizeofDerefPtr(ptrToDeref) SizeOf(*Cast(TypeOf(ptrToDeref), 0))

   '' macro typeofDerefPtr(): returns the type of the dereferenced pointer
   #define typeofDerefPtr(ptrToDeref) TypeOf(*Cast(TypeOf(ptrToDeref), 0))

   ' Allocate dynamically memory for a Double by New
   Dim As Double Ptr pd
   pd = New typeofDerefPtr(pd)
   *pd = 3.14159
   Print *pd

   ' Allocate dynamically memory for a Zstring*10 by Callocate
   Dim As ZString Ptr pz
   pz = CAllocate(10, sizeofDerefPtr(pz))
   *pz = "FreeBASIC"
   Print *pz

   Sleep
   Delete pd
   Deallocate(pz)

Dialect Differences
   * Not available in the -lang qb dialect unless referenced with the 
     alias __Cast.

Differences from QB
   * New to FreeBASIC

See also
   * Cast (Operator)
   * CPtr
   * CInt
   * TypeOf
   * Coercion and Conversion
    
