[[
является ключевым словом bash, аналогичным (но более мощным, чем) командой [
.
См.
http://mywiki.wooledge.org/BashFAQ/031 и http://mywiki.wooledge.org/BashGuide / TestsAndConditionals
Если вы не пишете POSIX sh, мы рекомендуем [[
.
Поскольку это ошибка компилятора, этот ответ специфичен для MSVC, и он неверен с точки зрения iso C ++. Для правильного и стандартного ответа см. Ответ @Bathsheba. (я призываю OP принять правильный ответ вместо этого ответа для будущих читателей).
From MSDN :
Оценивается номер 2147483648. Поскольку он больше максимального целочисленного значения 2147483647, тип 2147483648 не является int, а unsigned int.
blockquote>Другими словами, компилятор будет обрабатывать -2147483648 как
-
и2147483648
не как-2147483648
. Таким образом, часть2147483648
считаетсяunsigned int
, так как она больше, чемint
. и затем компилятор применяет оператор-
, который приводит к этому предупреждению.Решение:
auto test_case= -2147483648ll;
Это ошибка компилятора.
Первое, что нужно отметить: -2147483648 не является буквальным. В C ++ нет такой вещи, как отрицательный литерал.
-2147483648 - это константное выражение, оценивающее время компиляции, состоящее из 2147483648 и унарного оператора минуса.
В MSVC, ориентированном на Windows x64 ( где int и long являются 32 битами), 2147483648 должен быть long long int
, и поэтому так будет -2147483648. Я понимаю, что стандарт настаивает на на подписанном типе , если только вы не используете шестнадцатеричный или восьмеричный литерал.
Сужение преобразования в signed int
в этом случае, четко определен, так как вы нацеливаете платформу с 32-битным дополнением int
.
Дополнительная ссылка: см. http://en.cppreference.com/w / CPP / язык / integer_literal