Invece di rispondere direttamente alla tua domanda, lascia che ti mostri un esempio molto semplice. Considera una semplice classe A con un doppio come membro privato.
class A{
private:
double a;
public:
A(double _a);
double
get_a();
double&
get_aref();
const double&
get_aconstref();
};
L'implementazione di quella classe. Molto semplice
A::A(double _a): a(_a){
};
// Getters
double
A::get_a() {
return a;
}
double&
A::get_aref(){
return a;
}
const double&
A::get_aconstref(){
return a;
}
Ora consente di accedere al programma principale che utilizza la classe A.
int main(){
A ainst(6.0);
double a = ainst.get_a();
std::cout << "a = " << a << std::endl;
a++;
std::cout << "a+1 = " << a << std::endl;
std::cout << "Meanwhile, in class A, value of a = " << ainst.get_a() << std::endl;
double& aref = ainst.get_aref();
std::cout << "aref = " << aref << std::endl;
aref++;
std::cout << "aref+1 = " << aref << std::endl;
std::cout << "Meanwhile, in class A, value of a = " << ainst.get_a() << std::endl;
const double& aconstref = ainst.get_aconstref();
std::cout << "aconstref = " << aconstref << std::endl;
// aconstref++;
// std::cout << "aconstref+1 = " << aconstref << std::endl;
std::cout << "Meanwhile, in class A, value of a = " << ainst.get_a() << std::endl;
return 0;
}
Così si può fare solo una
const double& aconstref = ainst.get_aconstref();
e non
double& aconstref = ainst.get_aconstref();
se un metodo di una classe restituisce uno dei membri della classe di tipo T nella forma const T &, vuol dire che non vuole che il chiamante cambi quel membro. Nell'esempio sopra, T è un doppio. Sostituisci una std :: map nella posizione di nits e la stessa logica vale. Spero che sia abbastanza esplicativo. Se si rimuovono le due righe commentate, il compilatore si lamenta poiché si sta tentando di modificare tale riferimento.
digitare typedef della mappa per ridurre la ripetizione – Rookie
Per cosa si dispone di 'b'? Questo è C++, puoi avere funzioni gratis! – sbi
@Rookie, buona idea, grazie! Riposa tutto ok? –