Почему в классы потоков C ++ добавлена функция преобразования оператора void * ()?
Есть функция конвертацииoperator void*() const
в C ++ потоковые классы. так что все объекты потока могут быть неявно преобразованы вvoid*
, Во время взаимодействия с программистами на SO они предлагают мнене использоватьvoid*
если у вас нет веских причин использовать его.void*
это метод удаления безопасности типов и проверки ошибок. Таким образом, из-за наличия этой функции преобразования следующая программа является абсолютно действительной. Это недостаток вC ++ стандартная библиотека.
#include <iostream>
int main()
{
delete std::cout;
delete std::cin;
}
Посмотреть демоВот.
Вышеприведенная программа действительна на C ++ 03, но завершается неудачно при компиляции в C ++ 11 и более поздних компиляторах, поскольку эта функция преобразования удалена. Но вопрос в том, почему это было частью стандартной библиотеки C ++, если это опасно? Какова была цель разрешения преобразования потоковых объектов вvoid*
? Какая польза от этого?