Непейвода Н.Н. Программирование. Раздел 3

Непейвода Н.Н. Программирование. Страница 332

В С++ оформление константного параметра практически такое же: void Р ( const<описание формального параметра> ); Для неуказательных типов это означает в точности же эффект, что и для ObjectPascal, но уже по другой причине: здесь описывается некоторая об­ласть памяти в стеке с ограничением возможности присваивания значений точно так же, как и для любого локального константного описания.

Ситуация меняется, если речь идет об указателях. Из требования ру­ководства по ObjectPascalследует, что описание формального параметра указательного типа определяет переменную этого типа с именем, вводимым этим описанием. Коль скоро она получает значение фактического параметра указателя, это значение не может быть изменено. В С++ данная конструкция определяет память, к которой можно обращаться с использованием имени формального параметра. Как в случае обычного описания, так и при опи­сании формального параметра спецификаторconstзащищает от изменения эту память, а не значение самого указателя.

Представляют ли эти конструкции новый механизм параметризации?

Приведенное разъяснение явно показывает, что для обоих языков кон­стантный параметр дает в точности то, что требуется от входных параметров (с несколько различным пониманием того, что передается процедуре через параметр), но без дополнительной прагматической нагрузки параметров значений, связанной с образованием переменой, получающей копию пере­даваемого значения. Напротив, для ObjectPascalтот факт, что константные параметры не могут служить получателями в операторах присваивания, поз­воляет, в частности, организовывать передачу процедуре ссылки, когда фак­тические параметры оказываются переменными, с сохранением требуемой семантики. Это снимает противоречие между желанием передавать входные параметрымассивы по значению и стремлением к эффективности, которое заставляет, во избежание копирования больших массивов данных, пользо­ваться параметрамипеременными. А константный указательный параметр языка С++ непосредственно приспособлен к такому приему оперирования с массивами, структурами и другими составными типами.

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета &quot;Ангара-А5В&quot; в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие &quot;Крокодилы&quot;

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама