Это очень простой фрагмент кода:
#include <cstdio>
#include <unordered_map>
int main() {
std::unordered_map<int, int> m;
m[1] = m.find(1) == m.end() ? 0 : 1;
printf("%d\n", m[1]);
return 0;
}
Если карта не содержит 1
, то присвойте m[1]=0
; иначе m[1]=1
. Я попробовал это с различными компиляторами gcc
здесь.
gcc5.2 всегда выводит 1, gcc7.1 всегда выдает 0.
Почему это так отличается? Разве это не должно быть 0 всегда? Я не понимаю этого поведения. Какой самый безопасный способ написать такую логику?