In primo luogo, il C ++ ha abbastanza gradi di libertà che un computer non può rendere completamente sicuro. C ++ ti dà letteralmente pieno accesso a tutto ciò che la CPU può fare.
Funzioni come fscanf sono solo routine che eseguono il looping e il controllo internamente per darti funzionalità di livello superiore. Tuttavia, fscanf non ha alcuna conoscenza di quanto lontano debba essere un buffer (per esempio quanto è grande). L'unica parte del codice che fa ha quell'informazione è la libreria malloc, ma è anche solo un algoritmo di livello superiore per rendere le cose più facili di cui l'hardware non sa nulla.
In teoria, il compilatore può memorizzare queste informazioni e passarle alle estensioni MPX, ma in molte applicazioni che sarà quasi impossibile da fare perché la maggior parte delle cose sono memorizzate come void*
e passate manualmente così un analizzatore statico non può avere informazioni necessarie per impostare tali registri. L'unico modo per farlo sarebbe quello di memorizzare ulteriori informazioni in fase di runtime, cambiando così la dimensione di void*
che violerebbe le regole del C ++, quindi dovrebbe essere un tipo speciale che pochissimi sviluppatori implementeranno realmente perché sarà costa troppo.
Un overflow del buffer si verifica quando lo sviluppatore è pigro con la sua alimentazione, non quando l'hardware si guasta.
Questo è solo uno dei possibili bug nel software che lo rendono insicuro. Ci sono stati diversi bug che sono overflow interi, logica non valida, ecc.
Quindi no, non renderà C ++ completamente sicuro da usare - niente lo farà.