logo

Ključna beseda const v C++

V tem članku so različne funkcije ključna beseda const ki se nahaja v C++ se razpravlja. Kadarkoli ključna beseda const je pritrjen s katero koli metodo(), spremenljivko, spremenljivka kazalca , in s predmetom razreda preprečuje to specifično objekt/metoda()/spremenljivka da spremenite vrednost svojih podatkovnih elementov.

Konstantne spremenljivke:

Obstaja določen niz pravil za deklaracijo in inicializacijo konstantnih spremenljivk:



  • The spremenljivka const v času dodelitve ni mogoče pustiti neinicializiranega.
  • Nikjer v programu mu ni mogoče dodeliti vrednosti.
  • Konstantni spremenljivki je bilo treba zagotoviti eksplicitno vrednost v času deklaracije konstantne spremenljivke.

spremenljivka const

Spodaj je program C++ za predstavitev zgornjega koncepta:

C++
// C++ program to demonstrate the // the above concept #include  using namespace std; // Driver Code int main() {  // const int x; CTE error  // x = 9; CTE error  const int y = 10;  cout << y;  return 0; }>

Izhod
10>

Napaka zaradi napačne deklaracije : Če poskušate inicializirati spremenljivko const brez dodelitve eksplicitne vrednosti, se ustvari napaka med prevajanjem (CTE).



Konstantna ključna beseda s spremenljivkami kazalca:


Kazalce je mogoče deklarirati s ključno besedo const. Torej obstajajo trije možni načini uporabe ključne besede const s kazalcem, ki so naslednji:

Ko spremenljivka kazalca kaže na konstantno vrednost :



Sintaksa:

  const data_type* var_name;>

Spodaj je program C++ za implementacijo zgornjega koncepta:

C++
// C++ program to demonstrate the // above concept #include  using namespace std; // Driver Code int main() {  int x{ 10 };  char y{ 'M' };  const int* i = &x;  const char* j = &y;  // Value of x and y can be altered,  // they are not constant variables  x = 9;  y = 'A';  // Change of constant values because,  // i and j are pointing to const-int  // & const-char type value  // *i = 6;  // *j = 7;  cout << *i << ' ' << *j; }>

Izhod
9 A>

Pojasnilo: V zgornjem primeru sta i in j dve spremenljivki kazalca, ki kažeta na pomnilniško lokacijo const int-type in char-type, vendar je mogoče vrednost, shranjeno na teh ustreznih lokacijah, spremeniti, kot smo storili zgoraj.

V nasprotnem primeru , the pojavila se bo naslednja napaka: Če poskušamo spremeniti vrednost spremenljivke const.

java boolean

Ko spremenljivka kazalca const kaže na vrednost :

Sintaksa:

  data_type* const     var_name;>

Spodaj je primer za prikaz zgornjega koncepta:

C++
// C++ program to demonstrate the // above concept #include  using namespace std; // Driver Code int main() {  // x and z non-const var  int x = 5;  int z = 6;  // y and p non-const var  char y = 'A';  char p = 'C';  // const pointer(i) pointing  // to the var x's location  int* const i = &x;  // const pointer(j) pointing  // to the var y's location  char* const j = &y;  // The values that is stored at the memory location can  // modified even if we modify it through the pointer  // itself No CTE error  *i = 10;  *j = 'D';  // CTE because pointer variable  // is const type so the address  // pointed by the pointer variables  // can't be changed  // i = &z;  // j = &p;  cout << *i << ' and ' << *j << endl;  cout << i << ' and ' << j;  return 0; }>

Izhod
10 and D 0x7ffe21db72b4 and D>

Pojasnilo: Vrednosti, ki so shranjene v ustrezni kazalni spremenljivki i in j, je mogoče spreminjati, vendar lokacij, ki jih kažejo spremenljivke konstantnega kazalca, kjer so shranjene ustrezne vrednosti x in y, ni mogoče spreminjati.

V nasprotnem primeru se prikaže naslednja napaka: Spremenljivke kazalca so const in kažejo na lokacije, kjer sta shranjena x in y, če poskušamo spremeniti lokacijo naslova, se bomo soočili z napako.

Ko kazalec const kaže na spremenljivko const :

Sintaksa:

  const data_type* const var_name;>

Spodaj je program C++ za predstavitev zgornjega koncepta:

C++
// C++ program to demonstrate // the above concept #include  using namespace std; // Driver code int main() {  int x{ 9 };  const int* const i = &x;  // *i=10;  // The above statement will give CTE  // Once Ptr(*i) value is  // assigned, later it can't  // be modified(Error)  char y{ 'A' };  const char* const j = &y;  // *j='B';  // The above statement will give CTE  // Once Ptr(*j) value is  // assigned, later it can't  // be modified(Error)  cout << *i << ' and ' << *j;  return 0; }>

Izhod
9 and A>

Pojasnilo: Tukaj spremenljivka kazalca const kaže na spremenljivko const. Torej vam ni dovoljeno spreminjati konst spremenljivka kazalca (*P) niti vrednost, shranjena na lokaciji, ki jo to kaže spremenljivka kazalca (*P).

V nasprotnem primeru se prikaže naslednja napaka: Tu sta spremenljivka kazalca in lokacije, na katere kaže spremenljivka kazalca, konstantne, tako da se bo, če je katera od njih spremenjena, pojavila naslednja napaka:

seznami iz lateksa

Posredovanje vrednosti argumenta const nekonstantnemu parametru funkcije povzroči napako : Posredovanje vrednosti argumenta const parametru funkcije, ki ni const, ni veljavno, povzroči napako med prevajanjem.

Spodaj je program C++ za predstavitev zgornjega koncepta:

C++
// C++ program to demonstrate // the above concept #include  using namespace std; int foo(int* y) { return *y; } // Driver code int main() {  int z = 8;  const int* x = &z;  cout << foo(x);  return 0; }>

Izhod: Napaka v času prevajanja, ki se prikaže, kot da je vrednost const posredovana kateremu koli nekonstantnemu argumentu funkcije, potem se pojavi naslednja napaka v času prevajanja:

Poleg tega podajanje kazalca const ne bo povzročilo nobene napake, ker je ustvarjen drug kazalec, ki prav tako kaže na isto pomnilniško lokacijo.

C++
//C++ program to demonstrate the above concept #include  using namespace std; void printfunc(int* ptr) {  cout << 'Value :' << *ptr << endl;  cout << 'Address of ptr :' << &ptr << endl; } //Driver Code int main() {  int x = 10;  int* const i = &x;  printfunc(i);  cout << 'Address of i :' << &i << endl; }>

Izhod
Value :10 Address of ptr :0x7ffff0189b48 Address of i :0x7ffff0189b70>

Koda se izvede brez napak in oba kazalca imata različna naslova.

Na kratko lahko zgornjo razpravo zaključimo takole:

metoda podniza java

1. int vrednost = 5; // nekonstantna vrednost

2. const int *ptr_1 = &value; // ptr_1 kaže na vrednost const int, torej je to kazalec na vrednost const.

3. int *const ptr_2 = &value; // ptr_2 kaže na int, torej je to konstanten kazalec na nekonstantno vrednost.

4. const int *const ptr_3 = &value; // ptr_3 kaže na vrednost const int, torej je to kazalec const na vrednost const.

Konstantne metode:

Tako kot funkcije članov in argumente funkcij članov je tudi objekte razreda mogoče deklarirati kot konst . Objekta, deklariranega kot const, ni mogoče spreminjati in zato lahko prikliče samo funkcije člana const, saj te funkcije zagotavljajo, da se objekt ne spremeni.

Sintaksa:

const Class_Name Object_name;>
  • Ko je funkcija deklarirana kot const, jo je mogoče poklicati na katero koli vrsto objekta, const objekt kot tudi nekonstanten objekt.
  • Kadarkoli je objekt deklariran kot const, ga je treba inicializirati v času deklaracije. Vendar pa je inicializacija objekta med deklariranjem možna samo s pomočjo konstruktorjev.

Obstajata dva načina a stalna funkcija izjava:

Deklaracija navadne funkcije const :

  const void foo()    {     //void foo() const Not valid    }          int main()    {     foo();    }>

Konstantna članska funkcija razreda :

preveri različico java na linuxu
  class    {     void foo() const     {     //.....     }    }>

Spodaj je primer konstantne funkcije:

C++
// C++ program to demonstrate the // constant function #include  using namespace std; // Class Test class Test {  int value; public:  // Constructor  Test(int v = 0) { value = v; }  // We get compiler error if we  // add a line like 'value = 100;'  // in this function.  int getValue() const { return value; }  // a nonconst function trying to modify value  void setValue(int val) { value = val; } }; // Driver Code int main() {  // Object of the class T  Test t(20);  // non-const object invoking const function, no error  cout << t.getValue() << endl;  // const object  const Test t_const(10);  // const object invoking const function, no error  cout << t_const.getValue() << endl;  // const object invoking non-const function, CTE  // t_const.setValue(15);  // non-const object invoking non-const function, no  // error  t.setValue(12);  cout << t.getValue() << endl;  return 0; }>

Izhod
20 10 12>

Naslednja napaka se pojavi, če poskusite poklicati nekonstantno funkcijo iz objekta const

klicanje-nekonstantne-funkcije-iz-konstantnega-objekta


Parametri konstantne funkcije in vrnjena vrsta :

Parametri funkcije() in povratni tip funkcije() je mogoče deklarirati kot konstanto. Konstantnih vrednosti ni mogoče spremeniti, ker bo vsak tak poskus povzročil napako med prevajanjem.

Spodaj je program C++ za implementacijo zgornjega pristopa:

C++
// C++ program to demonstrate the // above approach #include  using namespace std; // Function foo() with variable // const int void foo(const int y) {  // y = 6; const value  // can't be change  cout << y; } // Function foo() with variable int void foo1(int y) {  // Non-const value can be change  y = 5;  cout << '
' << y; } // Driver Code int main() {  int x = 9;  const int z = 10;  foo(z);  foo1(x);  return 0; }>

Izhod
10 5>


Pojasnilo: Če je v funkciji foo() uporabljen stavek y = 6, bo prikazana naslednja napaka:

  • // y = 6; vrednosti const ni mogoče spremeniti ali spremeniti.

Za povratni tip const : Tip vrnitve funkcije() je const, zato nam vrne konstantno celoštevilsko vrednost. Spodaj je program C++ za implementacijo zgornjega pristopa:

C++
// C++ program for the above approach #include  using namespace std; const int foo(int y) {  y--;  return y; } int main() {  int x = 9;  const int z = 10;  cout << foo(x) << '
' << foo(z);  return 0; }>

Izhod
8 9>

Vrnjena vrednost bo konstantna vrednost.

Prav tako ni nobene bistvene težave pri posredovanju spremenljivke const ali non-const funkciji, dokler jo posredujemo po vrednosti, ker je ustvarjena nova kopija. Težava se pojavi, ko poskušamo posredovati konstantno spremenljivko s sklicevanjem na funkcijo, katere parameter ni konstanten. To ne upošteva kvalifikatorja const, kar vodi do naslednje napake:

posredovanje-konstantnega-argumenta-ne-konstantnemu-parametru po sklicu

Za povratni tip const in parameter const : Tukaj sta vrnjeni tip in parameter funkcije konstantnega tipa. Spodaj je program C++ za implementacijo zgornjega pristopa:

C++
// C++ program for the above approach #include  using namespace std; const int foo(const int y) {  // y = 9; it'll give CTE error as  // y is const var its value can't  // be change  return y; } // Driver code int main() {  int x = 9;  const int z = 10;  cout << foo(x) << '
' << foo(z);  return 0; }>

Izhod
9 10>

Pojasnilo: Tukaj lahko kot parameter const v funkcijo posredujemo tako konstantne kot nekonstantne vrednosti, vendar nam ni dovoljeno spremeniti vrednosti posredovane spremenljivke, ker je parameter const. V nasprotnem primeru se bomo soočili s spodnjo napako:

// y=9; dal bo napako med prevajanjem, ker je y const var, njegove vrednosti ni mogoče spremeniti.