int32_t my_number;
fprintf("%l", my_number); // LONG IS STIPULATED TO BE "AT LEAST" 32-BITS BUT NOT GUARANTEED
int64_t my_number;
fprintf("%ll", my_number); // LONG LONG IS STIPULATED TO BE "AT LEAST" 64-BITS BUT NOT GUARANTEED
То же самое относится и к другим функциям, таким как ltoa(). Я предполагаю, что проблема заключается в том, что с точки зрения функции она знает только «указатель» и просто работает на всех парах в зависимости от того, какую функцию вызвал программист, это кажется действительно сумасшедшим, подверженным ошибкам и опасным, не говоря уже о том, что что-то вроде того, что если вы измените один из ваших типов где-нибудь в вашем коде, везде, где вызываются эти функции, ваш компьютер просто взорвется.
- Как обстоят дела? вы должны использовать эти функции, учитывая несоответствие типов и их собственных размеров?
- Как вы должны справляться с реальностью, в которой вы можете изменить где-нибудь свой тип?
Вот так:
template
void value_to_ascii(const char* buffer, int max_size, const T& val)
{
if constexpr(std::is_same_v)
ltoa();
else if constexpr(std::is_same_v)
itoa();
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... ons-safely
Мобильная версия