Всем привет. Сегодня я решил написать про ещё один костыль, на который наступил я в результате разработки небольшой учебной программы на 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.
Надеюсь, вы не на ступите на эти грабли, как я.
Категории: Программирование