# Quick Start This chapter provides a quick introduction to get you started with **mp-units**. Much more details can be found in our [User's Guide](../users_guide/terms_and_definitions.md). ## Quantities A **quantity** is a concrete amount of a unit representing a quantity type of a specified dimension with a specific representation. It is represented in the library with a `quantity` class template. The [SI Brochure](../appendix/references.md#SIBrochure) says: !!! quote "SI Brochure" The value of the quantity is the product of the number and the unit. The space between the number and the unit is regarded as a multiplication sign (just as a space between units implies multiplication). Following the above, the value of a quantity in the **mp-units** library is created by multiplying a number with a predefined unit: ```cpp #include using namespace mp_units; quantity q = 42 * si::metre / si::second; ``` !!! info In case someone doesn't like the multiply syntax or there is an ambiguity between `operator*` provided by this and other libraries, a quantity can also be created with a two-parameter constructor: ```cpp #include using namespace mp_units; quantity q{42, si::metre / si::second}; ``` The above creates an instance of `quantity>{}, int>`. The same can be obtained using optional unit symbols: ```cpp #include using namespace mp_units; using namespace mp_units::si::unit_symbols; quantity q = 42 * m / s; ``` !!! tip Unit symbols introduce a lot of short identifiers into the current scope, and that is why they are opt-in. A user has to explicitly "import" them from a dedicated `unit_symbols` namespace. Quantities of the same kind can be added, subtracted, and compared to each other: ```cpp #include using namespace mp_units; using namespace mp_units::si::unit_symbols; static_assert(1 * km + 50 * m == 1050 * m); ``` Various quantities can be multiplied or divided by each other: ```cpp static_assert(140 * km / (2 * h) == 70 * km / h); ``` !!! note In case you wonder why this library does not use UDLs to create quantities, please check our [FAQ](faq.md#why-dont-we-use-udls-to-create-quantities). ## Quantity points The quantity point specifies an absolute quantity with respect to an origin. Together with quantities, they model [The Affine Space](../users_guide/framework_basics/the_affine_space.md). Quantity points should be used in all places where adding two values is meaningless (e.g., temperature points, timestamps, altitudes, readouts from the car's odometer, etc.). The set of operations that can be done on quantity points is limited compared to quantities. This introduces an additional type-safety. ```cpp #include #include #include #include int main() { using namespace mp_units; using namespace mp_units::si::unit_symbols; using namespace mp_units::usc::unit_symbols; quantity_point temp = si::zeroth_degree_Celsius + 20. * deg_C; std::cout << "Temperature: " << temp.quantity_from(si::zeroth_degree_Celsius) << " (" << temp.in(deg_F).quantity_from(usc::zeroth_degree_Fahrenheit) << ")\n"; } ``` The above outputs: ```text Temperature: 20 °C (68 °F) ``` !!! info Check [The Affine Space](../users_guide/framework_basics/the_affine_space.md) chapter to learn more about quantity points.