Witam,
stworzyłem taki przykładowy kod
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string var = "hello world";
string& ref = "hello world";
const string& const_ref = "hello world";
int var1 = 1;
int& ref1 = 1;
const int& const_ref1 = 1;
return 0;
}
Przy referencji pojawiają się błędy. Natomiast przy const referencji brak jest błędu. Oto komunikaty
1)Przy string
invalid initialization of non-const reference of type 'std::string& {aka std::basic_string<char>&}' from an rvalue of type 'const char*'
string& ref = "hello world";
^
2)Przy int
invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'
int& ref1 = 1;
^
Nie rozumiem czemu można użyć z const a bez modyfikatora zwraca błąd. Na moje wyczucie dzieje się tak gdyż z definicji adres referencji można przypisać tylko raz. Kompilator tworzy z literału obiekt(fragment pamięci, który może przechowywać dane) lecz nie potrafi się do niego odwołać. Dodając modyfikator const zmienna staje się de facto tylko do odczytu i kompilator potrafi wyświetlić ten literał. Natomiast bez const zmienna ref jest modyfikowalna ale nie jest możliwe odwołanie się to fragmentu pamięci i zmienienie wartości stąd kompilator zwraca błąd. Sam to wydedukowałem stąd wysoce prawdopodobne, że się mylę. Czekam na wasze sugestie, uwagi, odpowiedzi.
Pozdrawiam,