به دو دلیل، اول اینکه ممکنه شما کلاسی نوشته باشین که با استفاده از قالبها پیاده شده باشه مثل زیر و بخواین از این امکان استفاده کنین
#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 باشه.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)