Вопрос

В следующем C ++ код, 32767 + 1 = -32768.

#include <iostream>
int main(){
short var = 32767;
var++;
std::cout << var;
std::cin.get();
}

Есть ли способ просто оставить "var" как 32767, без ошибок?

Это было полезно?

Решение

Да, есть:

if (var < 32767) var++;

Кстати, вы не должны жесткокодировать постоянную, использовать numeric_limits<short>::max() определяется внутри <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!

Другие советы

#include <iostream> 
int main(){ 
unsigned short var = 32767; 
var++; 
std::cout << var; 
std::cin.get(); 
} 

Используйте «unsigned Colled int» или «длинный int»

#include <iostream>
int main(){
long int var = 32767;
var++;
std::cout << var;
std::cin.get();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top