русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Використання кваліфікатора const в оголошеннях параметрів


Дата додавання: 2014-04-22; переглядів: 930.


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

 

#include "string.h"

#include <iostream>

using namespace std;

void inc1( int * a, int * b) {

*a += *b;

}

void inc2( int * a, const int * b) {

*a += *b;

}

int main() {

const int N = 2;

int x = 1;

inc1( &x, &N );

inc2( &x, &N );

cout << x << endl;

}

 

При спробі виклику функції inc1 виникає помилка «Типи const int * i int * несумісні».

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

 

void f1( const int * p ){

int a;

*p = 123; // помилка

p = &a; // помилки немає

}

void f2( int * const p ) {

int a;

*p = 123; // помилки немає

p = &a; // помилка

}

void f3( const int * const p ) {

int a;

*p = 123; // помилка

p = &a; // помилка

cout << *p; // помилки немає

}


<== попередня лекція | наступна лекція ==>
Масиви і символьні рядки як параметри функцій | Багатовимірні масиви як параметри функцій


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн