W prostych słowach mam prosty wskaźnik:dla const odniesienia do const wskaźnik wskazujący na const obiektu
int* a;
teraz chciałbym zmienić wartość tego wskaźnika. Chcę to zrobić w funkcji. Funkcja zapewnia, że nie zmieni obiektu, wskaźnik wskaże, ale zmieni sam wskaźnik. Z tego powodu chciałbym, aby ta funkcja przyjmowała argument w następujący sposób: non-const reference (ponieważ wartość wskaźnika zostanie zmieniona) na wskaźnik niestały (sam wskaźnik można zmienić) wskazując na obiekt const (funkcja zapewnia, że obiekt, ten wskaźnik wskazuje, że nie zostanie zmieniony).
Najprostsza funkcja będzie:
void function(const int*& a){
a = 0;
}
ale gdy próbuję wywołać tę funkcję:
int main(){
int* a;
function(a);
return 0;
}
kompilator jest nieszczęśliwy i mówi:
nieważny inicjalizacji nie- const reference typu "const int * &" z wartości r "typu int" * " funkcja (a);
nie mogę zupełnie zrozumieć ten problem, jak dla mnie nie ma udział RValue (I m przechodzącą odniesienie do obiektu, który już istnieje na stosie.)
Pytanie jest, w jaki sposób mogę to zrobić prawidłowo?
Przykład można znaleźć tutaj: https://ideone.com/D45Cid
EDIT:
Zasugerowano, że moje pytanie jest zblizonym do Why isn't it legal to convert "pointer to pointer to non-const" to a "pointer to pointer to const"
moje pytanie jest inny jak nie używam wskaźnik do wskaźnika Używam tylko wskaźnika do obiektu/wartości i zapisuję do niego odniesienie, dlatego sytuacja jak w odpowiedzi na to pytanie:
const char c = 'c';
char* pc;
const char** pcc = &pc; // not allowed
*pcc = &c;
*pc = 'C'; // would allow to modify a const object
Nie jest możliwe w moim przypadku, ponieważ nie mogę zrezygnować z wskaźnika najwyższego poziomu (nie mam takiego wskaźnika).
Ponadto pytałem o ładnym i czystym rozwiązania tego problemu, który nie jest objęty w pytaniu
nie jestem pewien, czy można pomieszaj wskaźnik i odniesienie. Cóż, powinieneś, ale proszę, nie. Nikt nie zrozumie twojego kodu! – hr0m
@ Holt Nie mogę tego zrobić. Jest to prosty przykład, ale w prawdziwym kodzie później wykonuję operacje na tym obiekcie, więc nie mogę zadeklarować wskaźnika jako const – DawidPi
@ hr0m Wskaźnik do wskaźnika jest lepszy, niż wskaźnik do odwołania? Te, moim zdaniem, mają różne znaczenia. – DawidPi