Zijn statische klassenvariabelen hetzelfde als externe variabelen, alleen met klassenbereik?

Het lijkt mij dat een statische klassenvariabele identiek is aan een externe variabele, omdat je alleen verklaart in de statische int x / extern int x statement, en definieer het ergens anders (meestal in een .cpp bestand)

statische klassenvariabele

// .h file
class Foo
{
    static int x ;
} ;

// .cpp file
int MyClass::x = 0 ;

Externe variabelen:

// .h file
extern int y;

// .cpp file
int y = 1;

In beide gevallen wordt de variabele eenmaal ergens gedeclareerd en gedefinieerd in een bestand dat niet meer dan één keer in de compilatie wordt opgenomen (anders linkerfout)

6

3 antwoord

Ja, beide hebben statische opslagduur en externe koppeling; ze hebben in essentie dezelfde runtime-eigenschappen, maar verschillen in (compileertijd) zichtbaarheid.

4
toegevoegd

Min of meer. Beide hebben een externe koppeling en een statische levensduur. Beide wordt geïnitialiseerd bij het opstarten van het programma en vernietigd bij het afsluiten.

2
toegevoegd

Ja.

Als extra informatie kunnen in sommige programmeertalen die niet-optionele naamruimten/modules gebruiken statische klassenvariabelen worden uitgewisseld met globale variabelen.

In sommige gevallen hebben die andere programmeervariabelen zelfs geen statische klassenvariabelen en kunt u in plaats daarvan globale variabelen gebruiken.

Sommige ontwikkelaars geven de voorkeur aan statische klassenvariabelen, waardoor de relatie met de klasse wordt afgedwongen.

Het is ook een kwestie van hoe u uw applicatie ontwerpt, zelfs als beide functies beschikbaar zijn.

1
toegevoegd