Warum wurde der Operator void * () -Konvertierungsfunktion zu den C ++ - Stream-Klassen hinzugefügt?

Es gibt eine Konvertierungsfunktionoperator void*() const in C ++ - Stream-Klassen. damit alle Stream-Objekte implizit in @ konvertiert werden könnvoid*. Während der Interaktion mit Programmierern auf SO schlagen sie mich zu nicht verwendenvoid* es sei denn, Sie haben einen guten Grund, es zu verwenden.void* ist eine Technik zum Entfernen der Typensicherheits- und Fehlerprüfung. Also, aufgrund der Existenz dieser Konvertierungsfunktion ist folgendes Programm vollkommen gültig. Dies ist ein Fehler im C ++ - Standardbibliothek.

#include <iostream>
int main()
{
       delete std::cout;
       delete std::cin;
}

Siehe Live-DemoHier

Das obige Programm ist in C ++ 03 gültig, schlägt jedoch bei der Kompilierung in C ++ 11 und späteren Compilern fehl, da diese Konvertierungsfunktion entfernt wurde. Aber die Frage ist, warum es Teil der C ++ - Standardbibliothek war, wenn es gefährlich ist? Was war der Zweck, die Konvertierung von Stream-Objekten nach @ zu ermöglichevoid*? Was nützt es?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage