[achtung] cast указателя к bool
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 27.05.20 16:13
Оценка: 26 (4)
Чуть было не наступил на грабли

Есть код вида

#include <iostream>
#include <vector>

class TVAR
{
 public:
  TVAR(bool               /*v*/) {std::cout << "TVAR: bool\n";}
  TVAR(const char*        /*v*/) {std::cout << "TVAR: const char*\n";}
  TVAR(const std::string& /*v*/) {std::cout << "TVAR: std::string\n";}
};

int main()
{
 std::vector<TVAR> vec;

 vec.push_back("1234");
}


Работает как ожидается — push_back вызывает конструктор TVAR(const char*).

Решил его "улучшить" и заменить конструкторы TVAR(const char*) и TVAR(const std::string&) на унифицированный конструктор TVAR(const std::string_view&).

#include <iostream>
#include <vector>

class TVAR
{
 public:
  TVAR(bool               /*v*/) {std::cout << "TVAR: bool\n";}

  TVAR(const std::string_view& /*v*/) {std::cout << "TVAR: std::string_view\n";}
};

int main()
{
 std::vector<TVAR> vec;

 vec.push_back("1234");
}


И огрёб, потому что начал вызываться конструктор TVAR(bool)

Реально стрёмно.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.