SDDS++ represents the header separately from page data and uses typed C++ values instead of untyped allocation routines. The principal types are:
The relationship between SDDS types and exact C++ value types is shown below.
| SDDS type | sdds::Type value | Exact C++ type |
| longdouble | Type::LongDouble | long double |
| double | Type::Double | double |
| float | Type::Float | float |
| long64 | Type::Int64 | std::int64_t |
| ulong64 | Type::UInt64 | std::uint64_t |
| long | Type::Int32 | std::int32_t |
| ulong | Type::UInt32 | std::uint32_t |
| short | Type::Int16 | std::int16_t |
| ushort | Type::UInt16 | std::uint16_t |
| string | Type::String | std::string |
| character | Type::Character | char |
typeOf returns the SDDS type represented by a Scalar or Values object, and typeName returns its protocol name. Exact typed access is available through methods such as parameterAs<T>, columnAs<T>, and arrayAs<T>. The corresponding parameterConverted<T>, columnConverted<T>, and arrayConverted<T> methods perform checked numeric conversion. Overflow or invalid narrowing throws TypeError; floating-point-to-integer conversion requires an explicit RoundingMode unless the value is already integral.