В следующем коде C++, 32767 + 1 =-32768.
#include <iostream>
int main(){
short var = 32767;
var++;
std::cout << var;
std::cin.get();
}
Там какой-либо путь состоит в том, чтобы просто оставить "var" как 32 767 без ошибок?
Да, есть:
if (var < 32767) var++;
Кстати, не стоит жестко кодировать константу, используйте numeric_limits
, определенный в
заголовочном файле.
Вы можете заключить эту функциональность в шаблон функции:
template <class T>
void increment_without_wraparound(T& value) {
if (value < numeric_limits<T>::max())
value++;
}
и использовать ее как:
short var = 32767;
increment_without_wraparound(var); // pick a shorter name!
используйте 'unsigned short int' или 'long int'
#include <iostream>
int main(){
long int var = 32767;
var++;
std::cout << var;
std::cin.get();
}
#include <iostream>
int main(){
unsigned short var = 32767;
var++;
std::cout << var;
std::cin.get();
}