Ho un programma C++ in cui voglio inserire valori predefiniti per qualsiasi tasto mancante in un std::map
. Sto pensando che il modo più semplice per farlo sarebbe quello di usare std::map::operator[]()
come il comando touch POSIX - cioè, di lasciare il valore invariato se già esiste, ma di crearlo se non lo fa. Per example,Posso fare affidamento su std :: map :: operator [] per toccare?
#include <map>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> keys = {0, 1};
map<int, int> m;
m[1] = 5;
m[2] = 12;
for (const int i : keys)
{
m[i]; // touch value
}
for (auto const & kv : m)
{
cout << kv.first << ", " << kv.second << endl;
}
}
Posso essere sicuro che il compilatore non ottimizzare le m[i];
dichiarazioni, dal momento che io non sono il "fare" qualcosa con loro? (Non assegnando esplicitamente a, non leggendo da.)
Puoi citare una fonte? –
@ cp.engr Vedi modifica. –
Grazie. Posso suggerire di citare questo bit nella tua risposta? "Un'implementazione reale non deve valutare parte di un'espressione se può dedurre che il suo valore non è usato e che non vengono prodotti effetti collaterali che influenzano il comportamento osservabile del programma." Dal secondo blocco nella risposta accettata che hai collegato. –