Video: Data Structures Summary 2024
Om du har en array och du inte vill att innehållet ska ändras kan du göra det konstant. Följande kodkod, som finns i Array05-exemplet, visar detta tillvägagångssätt:
const int Permanent [5] = {1, 2, 3, 4, 5}; cout << permanent [1] << endl;
Denna array fungerar som vilken som helst annan matris, förutom att du inte kan ändra siffrorna inuti den. Om du lägger till en rad som följande rad får du ett kompilatorfel, eftersom kompilatorn är medveten om konstanter:
Permanent [2] = 5;
Det här är felet som du får när du försöker detta i kod:: Block:
Fel: Tilldelning av skrivskyddad plats. Permanent [2] '
Vad sägs om en konstant rad av nonconstants? Kan du göra det? Tja, ibland - beroende på kompilatorn. Så hemskt som följande kod (som finns i Array06-exemplet) ser ut - och det är inte ANSI-standard! - du får göra detta med äldre versioner av gcc-kompilatorn. (Microsoft Visual C ++ och Borland C ++ Builder tillåter inte det, och kompilatorns kod:: blocks presenterar ett fel: felaktigt arraytilldelningsfel.)
int NonConstant [5] = {1, 2, 3, 4, 5}; int OtherList [5] = {10, 11, 12, 13, 14}; OtherList = NonConstant;
Med andra ord säger den tredje raden: "Glöm vad OtherList pekar på; istället, gör det peka på den första matrisen, {1, 2, 3, 4, 5}! "Nu, du egentligen borde inte skriva kod så här (kom ihåg att sakerna är enkla och förståeligt), så om du vill förhindra denna typ av sak kan du göra arrayen konstant:
< ! --3 ->const int NonConstant [5] = {1, 2, 3, 4, 5}; const int OtherList [5] = {10, 11, 12, 13, 14}; OtherList = NonConstant;
När kompilatorn kommer till den tredje raden får du ett fel:
Fel: Tilldelning av skrivskyddad variabel 'OtherList'
Men du kanske märker att sättet du gjorde arrayen var konstant var på samma sätt som du gjorde dess element konstanta i koden som kom precis före detta exempel. hoppsan! Vad handlar det om? Det visar sig att det finns vissa regler.
Följande lista beskriver reglerna i detalj för att göra arrays konstanta:
-
Om du vill göra en array konstant kan du förutse dess typ med ordet const. När du gör det är matrisnamnet konstant, och elementen i matrisen är också konstanta. Således kan du inte ha en konstant uppsättning med icke-konstanta element, och du kan inte heller ha en icke-konstant uppsättning med konstanta element.
-
Begreppet nonconstant array existerar endast i gcc och är inte ANSI-standard.
Om du verkligen vill bli teknisk, säger C ++ ANSI-standarden att när du lägger ordet const framför en arraydeklaration gör du inte matrisen konstant; du säger att matrisen bara innehåller konstanter.
Men när du använder const på så sätt gör de flesta kompilatorer också matrisen själv konstant. Men det är bra. folk borde inte ta ett array namn och kopiera det till något annat. Det är inte bra programmeringsstil, och det är bara att begära buggar - eller åtminstone förvirring - senare.