En azından C++11'den beri, örneğin C++'da güzel sabit genişlikli tamsayılar elde ettik <cstdint>
veya C'lerde <stdint.h>
kutunun dışında (örneğin std::uint32_t
, std::int8_t
bir, o ile veya olmadan std::
önlerinde ve hatta minimum genişlikler için makrolar olarak (INT16_C
, UINT32_C
ve benzeri).
Yine de her gün kendi sabit genişlikli tamsayılarını tanımlayan kütüphanelerle uğraşıyoruz ve örneğin görmüş olabilirsiniz sf::Int32
, quint32
, boost::uint32_t
, Ogre::uint32
, ImS32
, ... İstersen devam edebilirim. Sen de muhtemelen birkaç tane daha tanıyorsun.
Bazen bu typedef'ler (genellikle makro tanımları da vardır), örneğin bir typedef geçmek istediğinizde çakışmalara neden olabilir. std
tam olarak aynı genişliğe sahip, ancak farklı şekilde tanımlanmış sabit genişlikli bir tamsayı bekleyen bir kitaplıktan bir işleve sabit genişlikli tamsayı.
Sabit genişlikli tamsayıların noktası, sabit bir boyuta sahip olmalarıdır, bildiğiniz gibi birçok durumda ihtiyacımız olan şey budur. Öyleyse neden tüm bu kütüphaneler C++ standardında zaten sahip olduğumuz tam olarak aynı tamsayıları yazsın ve yazsın? Bu ekstra tanımlar bazen kafa karıştırıcı, gereksizdir ve kod tabanınızı istila edebilir, ki bu çok kötü şeylerdir. Ve eğer söz verdikleri genişliğe ve imzaya sahip değillerse, en azından en az şaşkınlık ilkesine karşı günah işliyorlar, bu yüzden burada size sormamın amacı nedir?