szablony, funkcje inline

0

Cześć :)
Fragment Thinking in C++

Oczywiście, niekiedy chcemy, aby funkcje składowe klasy nie były definicjami funkcji inline. W takim przypadku kompilator musi "widzieć" deklarację template przed definicją funkcji składowej

Czylli co to oznacza? Że każda metoda, która jest definiowana w miejscu deklaracji jest tworzona jako funkcja inline?

2

Jeśli poziom optymalizacji jest wysoki i kompilator uzna to za stosowne to potraktuje funkcję jako funkcję inline. Jeśli chcesz wyłączyć tą funkcję wystarczy dodać opcję: "-fno-inline-functions".

0

dlaczego taki zabieg jest optymalizacją?

2

Bo szybciej jest kupic mleko w sklepie obok domu niz jechac po to do niemiec.

0

dobrze, ale jeżeli takie to oczywiste, to dlaczego nie wszystkie funkcje sa inline?

1

Bo po samochod do niemiec juz mozna sie przejechac.

0

ok, w takim razie co jest wymiernym miernikiem dla kompilatora, że warto jechać do Niemiec, lub też nie warto?

2

Duzo rzeczy, ale jedne z kluczowych to:

  1. Czy funkcja moze byc wrzucona w miejsce wywolania (np. rekursywne wywolania nie moga (w duzej czesci przypadkow))
  2. Poziom skomplikowania
  3. Rozmiar powiekszenia kodu po inlinowaniu
  4. Czy do funkcji odwolujemy sie przez wskaznik

Tak naprawde to kompilatory robia strasznie duzo rzeczy z tym czy inlinowac czy nie, czy nawet czesciowo inlinowac.

http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx Chociazby tu masz troche jak to dziala w jedynym slusznym kompilatorze.

0

Chociazby tu masz troche jak to dziala w jedynym slusznym kompilatorze.

Dlaczego tak uważasz, że ten słuszny, a inne nie?
Nie prowokuję w żaden sposób, chcę po prostu coś się dwoedziec :)

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