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?