Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

Nejste přihlášen(a). Přihlásit

#1 31. 01. 2025 19:54 — Editoval fmfiain (31. 01. 2025 20:02)

fmfiain
Příspěvky: 744
Reputace:   -1 
 

Inline funkcie a premenné c++

Dobrý deň,
čítal som rôzne články o inline funkciách a premenných v c++.
Napríklad pre funkcie: ak nie sú statické  a sú definované vo vnútri triedy, sú automaticky inline. Ak nie sú statické a sú definované mimo triedy, treba pred hlavičku napísať inline.
Napríklad pre premenné: ak sú statické a sú deklarované vo vnútri štruktúry, môžu sa definovať mimo tejto štruktúry pridaním inline pred premennú a tá si definovanú hodnotu zapamätá.
Ak sú statické a sú deklarované vo vnútri triedy, môžu sa definovať inline pridaním inline pred premennú zapúzdrenú v triede a tá si definovanú hodnotu zavolá.
V inline funkcii sa nesmú používať statické premenné (ani globálne ani lokálne).

Code:

struct SomeClass
{
    static std::string myStaticString;
};

inline std::string SomeClass::myStaticString{"This is cool"};

Code:

#include <iostream> 
using namespace std; 
  
// defining class with inline static member variable 
class myClass { 
public: 
    inline static int var = 10; 
}; 
  
// driver code 
int main() 
{ 
    // accessing inline static member variable 
    cout << myClass::var; 
    return 0; 
}

Mohli by ste mi poradiť viac o inline funkciách a premenných?

Ďakujem.

Offline

 

#2 01. 02. 2025 00:47

check_drummer
Příspěvky: 5578
Reputace:   106 
 

Re: Inline funkcie a premenné c++

↑ fmfiain:
Ahoj, forum většinou funguje tak že vzneseš konkrétní dotaz. Na obecné informace slouží spíš nějaké dokumentace, apod.


"Máte úhel beta." "No to nemám."

Offline

 

#3 01. 02. 2025 18:02

fmfiain
Příspěvky: 744
Reputace:   -1 
 

Re: Inline funkcie a premenné c++

Dobrý deň ↑ check_drummer:,
OK.  Tak moja otázka: Kedy sa oplatí použiť čarovné slovíčko inline v jazyku c++?

Ďakujem.

Offline

 

#4 01. 02. 2025 20:05

Aleš13
Příspěvky: 383
Reputace:   
 

Re: Inline funkcie a premenné c++

Když to vypadá, že funkce se bude volat mnohokrát a zároveň je její kód krátký. Překladač funkci nepřekládá jako funkci, ale rozvine ji (jako makro) všude v místě volání, takže odpadá režie s voláním a návratem z funkce.

U proměnných to znamená něco úplně jiného, ale protože mi systém hlavičkových souborů v C++ připadá uhozený, nikdy jsem to blíž nezkoumal.

Offline

 

#5 02. 02. 2025 19:32

MichalAld
Moderátor
Příspěvky: 5367
Reputace:   130 
 

Re: Inline funkcie a premenné c++

fmfiain napsal(a):

Dobrý deň ↑ check_drummer:,
OK.  Tak moja otázka: Kedy sa oplatí použiť čarovné slovíčko inline v jazyku c++?

Ďakujem.

Pokud se to učíš, tak nikdy. V reálném světě taky téměr nikdy. Teprve když potřebuješ napsat něco, co má běžet opravdu co nejrychleji jak je možné, tak když:
-se funkce volá opravdu mockrát (tak 10000+ krát)
-a když to co dělá je srovnatelné s vlastní administrativou zavolání funkce, což jsou tak plus minus 4 instrukce.

Takže třeba když obsahuje porovnání dvou čísel.

Offline

 

#6 03. 02. 2025 03:06

fmfiain
Příspěvky: 744
Reputace:   -1 
 

Re: Inline funkcie a premenné c++

Dobrý deň ↑ MichalAld:,
a platí to aj pre inline premenné?

Ďakujem.

Offline

 

#7 03. 02. 2025 09:09

MichalAld
Moderátor
Příspěvky: 5367
Reputace:   130 
 

Re: Inline funkcie a premenné c++

↑ fmfiain:
Já po pravdě nevím, co jsou inline proměnné, za mého mládí bývaly jen proměnné typu "register". Takže si to budeš muset najít. Ale předpokládám, že to bude stejné jako s těmi funkcemi - že když to nebudeš používat, vůbec nic se nestane. A pokud chceš psát skutečně vysoce optimalizovaný kód, tak jen inline funkce tě stejně nespasí.

Offline

 

#8 03. 02. 2025 11:52

fmfiain
Příspěvky: 744
Reputace:   -1 
 

Re: Inline funkcie a premenné c++

Dobrý deň ↑ MichalAld:,
ja viem, že ma to nespasí, ale keď čítam cudzie kódy, tak tam sa to vyskytuje. Preto sa o tom informujem.

Ďakujem.

Offline

 

#9 03. 02. 2025 12:12

Aleš13
Příspěvky: 383
Reputace:   
 

Re: Inline funkcie a premenné c++

Je to takový rovnák na vohejbák, aby se zaručilo, že bude existovat jen jedna instance té proměnné. Ale jako obvykle v céčku, je to celé popletené a zatížené tuctem různých podmínek a souvislostí. Jestli to chceš detailně, tak si to přečti v referenční dokumentaci (já to nikdy nedočet do konce a taky se nic nestalo).

Offline

 

#10 03. 02. 2025 16:49

fmfiain
Příspěvky: 744
Reputace:   -1 
 

Re: Inline funkcie a premenné c++

Dobrý deň ↑ Aleš13:,
zistil som, že inline premenné fungujú rovnako ako inline funkcie (prečítaj si hneď prvý odsek):

https://open-std.org/JTC1/SC22/WG21/doc … 0386r0.pdf

Píše sa tam, že inline premenné a inline funkcie majú rovnakú sémantiku. Tak ako pri inline funkciách sa každá nakopíruje do miesta, kde by sa mala volať, rovnako premenná sa nakopíruje tam kde sa má volať.

Offline

 

#11 03. 02. 2025 19:56

check_drummer
Příspěvky: 5578
Reputace:   106 
 

Re: Inline funkcie a premenné c++

↑ fmfiain:
A proměnná se volá?


"Máte úhel beta." "No to nemám."

Offline

 

#12 03. 02. 2025 22:18 — Editoval fmfiain (03. 02. 2025 22:30)

fmfiain
Příspěvky: 744
Reputace:   -1 
 

Re: Inline funkcie a premenné c++

Dobrý deň ↑ check_drummer:,
prepáč, nepochopil som tvoju otázku.

Asi si myslel, na ktorom mieste v kóde sa premenná volá. Samozrejme v nejakej procedúre alebo funkcií. Pre každú funkciu sa vloží inline premenná osobitne, za prípadu, že je v ňom použitá.
Keď sa funkcia skončí, premenná sa zabudne. Ak sa v nejakej ďalšej funkcií opäť zavolá, inline premenná má hodnotu, ako keby nebola v žiadnej funkcií upravená.

Offline

 

#13 04. 02. 2025 09:01

check_drummer
Příspěvky: 5578
Reputace:   106 
 

Re: Inline funkcie a premenné c++

↑ fmfiain:
Byla to řečnická otázka, protože proměnná se nevolá.


"Máte úhel beta." "No to nemám."

Offline

 

#14 04. 02. 2025 12:50

fmfiain
Příspěvky: 744
Reputace:   -1 
 

Re: Inline funkcie a premenné c++

Dobrý deň ↑ check_drummer:,
čo sa s ňou deje, keď je definovaná mimo funkcie, v ktorej sa používa? Ja som myslel, že keď má rovnakú sémantiku ako funkcia tak sa aj rovnako volá.

Offline

 

#15 05. 02. 2025 15:18

check_drummer
Příspěvky: 5578
Reputace:   106 
 

Re: Inline funkcie a premenné c++

↑ fmfiain:
Volají se funkce, na proměnné se odkazuješ nebo jim přiřazuješ hodnotu....


"Máte úhel beta." "No to nemám."

Offline

 

#16 05. 02. 2025 16:19

fmfiain
Příspěvky: 744
Reputace:   -1 
 

Re: Inline funkcie a premenné c++

Dobrý deň ↑ check_drummer:,
zistil som, že preprocesor rozvíja makrá. A pokiaľ sa makrá rozvíjajú tak ako inline funkcie, tak ich potom tie inline funkcie sa rozvíjajú tiež preprocesorom.
Ale neviem, či to je užitočná informácia.

Offline

 

#17 05. 02. 2025 18:06 — Editoval Aleš13 (05. 02. 2025 18:25)

Aleš13
Příspěvky: 383
Reputace:   
 

Re: Inline funkcie a premenné c++

Záleží na překladači, ono to v tomto bodě není úplně jednoznačné. U makra je zaručené, že se provede jako textová substituce, ale specifikátor inline to nevynutí, překladač jej nemusí akceptovat (třeba když by to vyšlo složité nebo to prostě neumí). Například v kódu

Code:

inline int f(int a, int b);

int main() {
    ....
    int z = f(x, y);
    ....
}


inline int f(int a, int b) {
    return a + b;}

je funkce f napřed deklarována, potom použita a nakonec definována. Je to bohužel legální, ale překladač z toho může mít těžkou hlavu. Buď to bude překládat víceprůchodově, nebo nechá vložení funkce na linkeru, a nebo se na to prostě vykašle a normálně ji zavolá.
Další věc je, že kód inline funkce může být vygenerován předem (jako u funkce) a na dané místo se vkládá až ve fázi generování kódu. To znamená, že nemusí proběhnout meziřádkové (registrové) optimalizace mezi kódem funkce a volajicím kódem a podobně.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson