logo

Ключове слово const у C++

У цій статті описано різні функції ключове слово const який знаходиться в C++ обговорюються. Будь-коли ключове слово const приєднується до будь-якого method(), змінної, покажчик змінної , а з об’єктом класу запобігає цьому конкретному об'єкт/метод()/змінна щоб змінити значення елементів даних.

що робить ravel у python

Постійні змінні:

Існує певний набір правил для оголошення та ініціалізації постійних змінних:



  • The змінна const не можна залишити неініціалізованим під час призначення.
  • Йому не можна призначити значення ніде в програмі.
  • Константній змінній необхідно надати явне значення під час оголошення константної змінної.

змінна const

Нижче наведено програму C++ для демонстрації вищезазначеної концепції:

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; }>

Вихід
10>

Помилка, пов’язана з неправильною декларацією : Якщо ви спробуєте ініціалізувати змінну const без присвоєння явного значення, тоді генерується помилка під час компіляції (CTE).



Ключове слово Const зі змінними-вказівниками:


Покажчики можуть бути оголошені за допомогою ключового слова const. Отже, є три можливі способи використання ключового слова const із вказівником, які є такими:

Коли змінна покажчика вказує на постійне значення :



Синтаксис:

  const data_type* var_name;>

Нижче наведено програму C++ для реалізації вищезазначеної концепції:

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; }>

Вихід
9 A>

Пояснення: У наведеному вище випадку i та j є двома змінними-покажчиками, які вказують на місце пам’яті const int-type та char-type, але значення, що зберігається в цих відповідних розташуваннях, можна змінити, як ми робили вище.

Інакше , в з'явиться така помилка: Якщо ми спробуємо змінити значення змінної const.

Коли змінна вказівника const вказує на значення :

Синтаксис:

  data_type* const     var_name;>

Нижче наведено приклад для демонстрації вищезазначеної концепції:

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; }>

Вихід
10 and D 0x7ffe21db72b4 and D>

Пояснення: Значення, які зберігаються у відповідних змінних-вказівників i та j, можна змінювати, але місця, на які вказують змінні-вказівники const, де зберігаються відповідні значення x та y, не можна змінювати.

В іншому випадку з'явиться така помилка: Змінні вказівника є const і вказують на місця, де зберігаються x і y, якщо ми спробуємо змінити розташування адреси, тоді ми зіткнемося з помилкою.

Коли вказівник const вказує на змінну const :

Синтаксис:

  const data_type* const var_name;>

Нижче наведено програму C++ для демонстрації вищезазначеної концепції:

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; }>

Вихід
9 and A>

Пояснення: Тут змінна-вказівник const вказує на змінну const. Отже, вам не дозволено змінювати const змінна покажчика (*P) ані значення, що зберігається у вказаному місці змінна покажчика (*P).

В іншому випадку з'явиться така помилка: Тут і змінна вказівника, і розташування, на які вказує змінна вказівника, є постійними, тому, якщо будь-яке з них змінено, з’явиться така помилка:

Передача значення константного аргументу неконстантному параметру функції викликає помилку : Передача значення аргументу const неконстантному параметру функції є недійсною, це призводить до помилки під час компіляції.

Нижче наведено програму C++ для демонстрації вищезазначеної концепції:

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; }>

Вихід: Помилка під час компіляції, яка з’явиться так, ніби константне значення передається будь-якому неконстантному аргументу функції, тоді з’явиться така помилка під час компіляції:

Крім того, передача вказівника const не призведе до жодної помилки, оскільки створюється інший вказівник, який також вказує на ту саму область пам’яті.

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; }>

Вихід
Value :10 Address of ptr :0x7ffff0189b48 Address of i :0x7ffff0189b70>

Код виконується без будь-яких помилок, і два покажчики мають різні адреси.

У двох словах, наведене вище обговорення можна завершити таким чином:

1. int значення = 5; // неконстантне значення

2. const int *ptr_1 = &value; // ptr_1 вказує на значення const int, тому це вказівник на значення const.

3. int *const ptr_2 = &value; // ptr_2 вказує на int, тому це постійний покажчик на неконстантне значення.

4. const int *const ptr_3 = &value; // ptr_3 вказує на значення const int, тому це вказівник const на значення const.

Константні методи:

Подібно до функцій-членів і аргументів функцій-членів, об’єкти класу також можуть бути оголошені як конст . Об’єкт, оголошений як const, не може бути змінений і, отже, може викликати лише функції-члени const, оскільки ці функції гарантують відсутність змін у об’єкті.

Синтаксис:

const Class_Name Object_name;>
  • Коли функція оголошена як const, її можна викликати для будь-якого типу об’єкта, як const, так і неconst об’єктів.
  • Щоразу, коли об’єкт оголошується як const, його потрібно ініціалізувати під час оголошення. Однак ініціалізація об'єкта при оголошенні можлива лише за допомогою конструкторів.

Є два способи a постійна функція декларація:

Оголошення звичайної константної функції :

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

Постійна функція-член класу :

  class    {     void foo() const     {     //.....     }    }>

Нижче наведено приклад постійної функції:

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; }>

Вихід
20 10 12>

Наступна помилка виникне, якщо ви спробуєте викликати неконстантну функцію з константного об’єкта

calling-non-const-function-from-const-object


Параметри постійної функції та тип повернення :

Параметри функції() і Тип повернення функції() може бути оголошений як константа. Константні значення не можна змінити, оскільки будь-яка така спроба призведе до помилки під час компіляції.

Нижче наведено програму C++ для реалізації вищезазначеного підходу:

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; }>

Вихід
10 5>


Пояснення: Якщо оператор y = 6 використовується у функції foo(), буде показано наступну помилку:

  • // y = 6; значення const не можна змінити або змінити.

Для типу повернення const : Функція () повертає тип const, тому вона повертає нам ціле значення const. Нижче наведено програму C++ для реалізації вищезазначеного підходу:

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; }>

Вихід
8 9>

Повернене значення буде постійним значенням.

Крім того, немає суттєвої проблеми з передаванням постійної чи неконстантної змінної у функцію, якщо ми передаємо її за значенням, оскільки створюється нова копія. Проблема виникає, коли ми намагаємося передати константну змінну за посиланням на функцію, параметр якої не є константою. Це ігнорує кваліфікатор const, що призводить до такої помилки:

передача-константного-аргументу-неконстантному-параметру за посиланням

Для типу повернення const і параметра const : Тут і тип повернення, і параметр функції належать до константних типів. Нижче наведено програму C++ для реалізації описаного вище підходу:

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; }>

Вихід
9 10>

Пояснення: Тут як константні, так і неконстантні значення можна передати функції як константний параметр, але нам не дозволено змінювати значення переданої змінної, оскільки параметр є константним. В іншому випадку ми зіткнемося з такою помилкою:

// y=9; це дасть помилку під час компіляції, оскільки y є const var, його значення не можна змінити.