int64_t
uint8_t
uint16_t
uint32_t
uint64_t
These types have their use, but you will find that most APIs do not use them; instead, they use the
fundamental types directly. This can make your programming confusing, as you constantly need to check
the underlying fundamental type to ensure you do not end up with unintended truncation or expansion.
These types might come into use more, so I recommend checking for their usage in major libraries and
APIs from time to time and adjusting your code accordingly if they become widely adopted. Of course, if
you absolutely need a variable to be, for example, an unsigned 32-bit integer, you should certainly make
use of uint32_t and make any adjustments for API calls and portability as needed.
Floating-point numbers are the same as far as size order rules. They go from float to double to long
double. In Visual C++, float is a 32-bit floating-point number and double and long double are both
64-bit floating point numbers (long double is not larger than double, in other words).
C++ does not have any native type that is comparable to C#’s decimal type. However, one of the nice
things about C++ is there are typically a large number of free or inexpensive libraries that you can license.
For example, there’s the decNumber library, the Intel Decimal Floating Point Math Library, and the GNU
Multiple Precision Arithmetic Library. None are exactly compatible with C#’s decimal type, but if you are
writing for Windows systems only, then you can use the DECIMAL data type to get that compatibility if
needed, along with the Decimal Arithmetic Functions and the Data Type Conversion Functions.
There is also a Boolean type, bool, which can be true or false. In Visual C++, a bool takes up a byte.
Unlike in C#, a bool can be transformed into an integer type. When false, it has an integer-equivalent
value of 0, and when true, it has a value of 1. So the statement bool result = true == 1; will compile
and result will evaluate to true when the statement has been executed.
Then there is the wchar_t type, which holds a wide character. A wide character’s size varies based on
the platform. On Windows platforms, it is a 16-bit character. It is the equivalent of C#’s char type. It is
frequently used to construct strings. We will discuss strings in another chapter since many variants can be
used for strings.
Lastly, there is the void type, which is used the same way it is in C#. And there is a std::nullptr_t
type, which is messy to explain properly, but basically is there to be the type of the nullptr literal, which
is what you should use instead of NULL or a literal 0 (zero) to check for null values.
Enumerations
Enumerations are fairly similar to each other in C++ and C#. C++ has two types of enums: scoped and
un-scoped.
A scoped enumeration is defined as either an enum class or an enum struct. There is no difference
between the two. An un-scoped enumeration is defined as a plain enum. Let’s look at a sample:
Sample: EnumSample\EnumSample.cpp
#include <iostream>
#include <ostream>
#include <string>
#include "../pchar.h"
enum class Color
{
Red,