Предупреждение в g ++ 4.5.2 uint16_t с Wconversion - PullRequest
2 голосов
/ 07 июня 2011

Если я скомпилирую следующую программу с g ++ и включу предупреждения для преобразований (-Wconversion)

#include<stdint.h>
int main() {
  uint16_t foo = 1;
  foo += 1;
  return 0;
}

Я получу предупреждение, предупреждение: преобразование в uint16_t из int может изменить его значение.

Хорошо, если 1 в foo + = 1 интерпретируется как int, но как насчет:

foo+=static_cast<uint16_t>(1);

Я получаю одно и то же предупреждение, оператор не должен работать, когда типы обоихстороны одинаковы, без преобразования в целое число?

1 Ответ

2 голосов
/ 07 июня 2011

Я получил объяснение, оно исходит от C, но это должно быть в равной степени действительным в C ++:

Указать числовой литерал как 8-битный?

Для арифметики:все операнды повышаются до int, если они меньше.Это объясняет проблему и почему она не срабатывает при инициализации или явном приведении, потому что приведение будет отменено для вычисления суммы с int s.

...