به دو دلیل، اول اینکه ممکنه شما کلاسی نوشته باشین که با استفاده از قالبها پیاده شده باشه مثل زیر و بخواین از این امکان استفاده کنین
#include <limits>
template <class T>
class X
{
public:
void show()
{
if(std::numeric_limits<T>::is_signed)
...
}
};
int main()
{
X<int> int_x;
X<unsigned> uint_x;
return 0;
}
دلیل دوم در رابطه با دادههایی هست که علامتدار بودن یا نبودن اونها وابسته به پیادهسازی هست و در استاندارد قید محکمی برای علامتدار بودن و نبودن ندارن.
به عنوان نمونه دادهی char
میتونه در پیادهسازی علامتدار یا بدون علامت در نظر گرفته بشه و مثل int
که لزوماً به معنای signed int
هست، char
لزوماً به معنای signed char
نیست بلکه ممکنه unsigned char
باشه.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)