C++ co to jest ?

0

Nie wiem jak znaleźć informacje i nie wiem dokładnie co to robi :

   trnode( const std::string& f, const std::vector< tree > & subtrees, 
           size_t refcnt )
      : f{f},
        subtrees{ subtrees },
        refcnt{ refcnt }
   { }

nie rozumiem tych const std::string& f oraz przy koncu metody tego znaku ":" czy to znaczy że dziedziczy jak przy klasach ? jakies linki etc jak się to wgl nazywa :D
kod z pliku .h
Mam jeszcze taki kod:

void tree::operator = ( const tree& t )
{
    this->pntr = t.pntr;
    this->pntr->refcnt++;
}

const std::string& tree::functor( ) const
{
    return this->pntr->f;
}

const tree& tree::operator [] ( size_t i ) const
{
    return this->pntr->subtrees[i];
}

no i co tam robi const std::string& <funkcja>() const
co robi to const na koncu jak ktos by mógł podać linki albo z jakiego to standardu i czego szukać :D

5

Referencje, dziedziczenie, klasy - polecam dowolny kurs.
const - mówisz kompilatorowi, że zmienna nie będzie zmienialna (z wyjątkami)
inicjalizacja po : - lista inicjalizacyjna konstruktora, służy do inicjalizacji członków klasy, których domyślna wartość nie istnieje lub jest inna niż chcemy (tyczy się również rodziców)
const po nazwie funkcji - kwalifikator typu dla niejawnego parametru this metod klasy. W tym przypadku można je również wołać na const referencjach/elementach i wskaźnikach na const elementy.

2

: to lista inicjalizacyjna. Jakikolwiek kurs o konstruktorach w c++ uświadomiłby ci to.

Jeśli chodzi o const &, to jest to referencja do obiektu, którego nie można zmienić. Stosuje się to w argumencie po to, aby nie kopiować niepotrzebnie obiektu.

Dodatkowo zwracanie const & może wynikać z tego, że metoda jest const, i wtedy ona nie może zwrócić zwykłej referencji do obiektu własnej klasy, bo tego obiektu nie można zmienić. Chyba, że metoda jest non-const to wtedy zwykła referencja przejdzie.

0

No a jakieś proste przykłady z tymi const na koncu to są te "rvalues" ? szukam po necie ale jest sporo bardziej zaawansowanych przykładów niż tych podstawowych const na koncu są od c++11 czy 14?

0
struct Foo
{
	void bar(){
		BARK;
	}
	
	void baz() const {
		BARK;
	}
};

void const_call(Foo const& f){
//	f.bar(); // ERROR
	f.baz();
}

auto main() -> int
{
	Foo f;
	f.bar();
	f.baz();
	
	const_call(f);
}

http://melpon.org/wandbox/permlink/kbaU61CAFOt0iQXC

1 użytkowników online, w tym zalogowanych: 0, gości: 1