Just a quick question, if string::npos represents the largest possible value for a string object, how can this value be -1 if it's an unsigned integer?
I know this value will change for different compilers, as string::npos on my compiler is set to 4,294,967,295 which makes sense but I don't understand how -1 can represent the largest value.

Thanks in advance

When you overflow or underflow an unsigned type, wrap-around occurs. Due to unsigned wrap-around, -1 becomes the largest unsigned value for the type. One common trick is taking advantage of that effect for decrementing loops on an unsigned counter without having to know the actual range of the type:

for (std::size_t i = n; i < (size_t)-1; i--) {
    // ...
}

Edited 6 Years Ago by Narue: n/a

Because it is an unsigned integer, shouldn't it only be able to store positive values, like when it wraps around wouldn't the value now be 0?
Or is the -1 just like a catch all method, so that nothing else can possibly have that value?

>Because it is an unsigned integer, shouldn't it only be able to store positive values
Yes, that's it exactly.

>Or is the -1 just like a catch all method, so that nothing else can possibly have that value?
If it helps, you can think of -1 in unsigned context as (0U - 1) . The effect is the same: subtracting 1 from 0 underflows and wraps around to the largest value for unsigned int.

Edited 6 Years Ago by Narue: n/a

I think I understand...
So is the -1 used to represent the maximum value for any compiler, as they will be different?

This question has already been answered. Start a new discussion instead.