C++ Academy
16.4K subscribers
690 photos
131 videos
1 file
636 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥 best it channels

РКН: clck.ru/3FmxJF
Download Telegram
🖥 Предупреждение об арифметическое переполнение

▶️Итак, при запуске этого кода:
#include <iostream>
#include <vector>

int main() {
std::vector<int> a{0,1,2,3,4,5};
int b = 0;
std::cout << a[b + 1] << std::endl; // подчеркивает 'b+1'
return 0;
}

возникает проблема:
Арифметическое переполнение: использование оператора "+" на байтовом значении 4 и приведение результата к байтовому значению 8. Приведите значение к более широкому типу перед вызовом оператора "+", чтобы избежать переполнения (io.2)


Почему возникает такое предупреждение?


▶️В общем, в этом случае суть предупреждения такая: для индексации вектора на 64-битной платформе используется 64-битное беззнаковое целое, но выражение b+1 имеет тип int. Если предположить, что в b будет максимальное значение, представимое типом int, то получим UB.

Решение: привести хотя бы один из операндов к 64-битному типу.

В общем, компилятор ругается здесь не на конкретные значения, а на типы, используемые в выражении.

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133🔥21