Nel documentation, posso vedere che std::vector<bool>
è ottimizzato per l'efficienza di spazio rendendo ogni booleano occupare un singolo bit. Dalla documentazione:std :: vector <bool> implementazione ottimizzazione
Il modo in cui std :: vector è reso efficiente in termini di spazio (oltre che se è ottimizzato del tutto) è definito dall'implementazione.
Ciò significa che dipende dall'implementazione del compilatore? Se sì, dove posso controllare se il mio compilatore lo supporta? Perché non lo vogliono supportato? Sembra un'implementazione davvero semplice ed efficiente.
In caso negativo, cosa significa e cosa implica se desidero che venga eseguita questa ottimizzazione?
Sto usando il set di strumenti GCC TDM.
Sì, significa che l'implementazione di 'std :: vector' dipende in gran parte dal compilatore. Potrebbe non essere affatto ottimizzato, o potrebbe essere ottimizzato in modo specifico per l'implementazione. Generalmente lo trovi consultando la documentazione per il tuo compilatore. Con GCC e altri toolchain open source, suppongo che potresti anche consultare il codice sorgente. Ma questo non solo richiede più lavoro, potrebbe non essere una buona idea, dal momento che il codice sorgente documenta solo l'implementazione, non il contratto. –
Un modo semplice per verificare se viene fornita tale ottimizzazione è verificare se 'std :: vector :: reference_type' è' bool & 'o qualcos'altro. In quest'ultimo caso, hai un tipo di proxy, che dovrebbe essere consentito solo per l'implementazione "ottimizzata". –
@MatteoItalia 'std :: vector :: reference' è necessario per essere un proxy anche se l'implementazione non contiene effettivamente i bit. –