Блог пользователя Akpr

Автор Akpr, история, 3 года назад, По-английски

Dear community Why the output of below code is not -1 ?

CODE --------------------------

include<bits/stdc++.h>

using namespace std;

int main(){ vector v; cout << v.size() — 1 << endl;

}


RECIEVED OUTPUT => 4294967295 but not -1

  • Проголосовать: нравится
  • -31
  • Проголосовать: не нравится

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by Akpr (previous revision, new revision, compare).

»
3 года назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

v.size() gives unsigned_int.

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Because v.size() is size_t which is unsigned type (width of type is implementation-defined).
v.size() - 1 = (0 :: size_t) - (1 :: int) = [1 casting to wider type size_t] = (0 :: size_t) - (1 :: size_t) = (2^b - 1 :: size_t) [b - size of size_t in bytes].

In other words, unsigned overflow was happen.