Bool, который испортит вам жизнь

Всем привет. Сегодня я решил написать про ещё один костыль, на который наступил я в результате разработки небольшой учебной программы на C++.

Итак, дело было вечером, делать было нечего я разрабатывал некоторый калькулятор. Ни big deal, ни rocket science, просто класс, который умеет простую арифметику. Так как этот класс умел инстанцироваться от строки, то один из конструкторов принимал std::string number.

Всё выглядело примерно так:

class test_class 
{
public:
    test_class(std::string number) 
    {
        if (is_negative[0] == "-")
        {
            is_negative = true;
        }
    }

private:
    bool is_negative;
};

Так как я бомж, то у меня Windows, а не мак про. Поэтому, пишу я на С++ в Студии. И, когда я написал этот код в msvc 2013, то всё нормально работало. Какого было моё удивление, когда я завалил почти все тесты в контекст-системе, для которой я писал этот код. Почти все результаты тестов у меня были отрицательными (в смысле, числа были меньше 0). Это странно, ведь я написал порядка 50 тестов, которые покрывали мой код.

Так как на сервере контекстной-системы стояла Ubuntu, то я решил и там протестировать код. Благо Ubuntu 14.04 была на виртуалке. Не долго думая, я запустил вторую ось, взял свой g++ и запустил с ключом -std=c++11.

Ух, и удивился я. Оказывается, что bool по дефолту не определен. И он может быть, как true, так и false.

Надеюсь, вы не на ступите на эти грабли, как я.

Категории: Программирование