Search code examples
c++variablesinteger-overflow

How to avoid integer overflow?


In the following C++ code, 32767 + 1 = -32768.

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

Is there any way to just leave "var" as 32767, without errors?


Solution

  • Yes, there is:

    if (var < 32767) var++;
    

    By the way, you shouldn't hardcode the constant, use numeric_limits<short>::max() defined in <limits> header file instead.

    You can encapsulate this functionality in a function template:

    template <class T>
    void increment_without_wraparound(T& value) {
       if (value < numeric_limits<T>::max())
         value++;
    }
    

    and use it like:

    short var = 32767;
    increment_without_wraparound(var); // pick a shorter name!