Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1

Кент Рейсдорф. BORLAND C++BUILDER. Страница 62

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

следующем примере:

]

Обратите внимание, что вызов функции при передаче аргумента по зна­чению и по ссылке выглядит одинаково.

Вы заметили одну потенциальную проблему, связанную с передачей по ссылке? При использовании ссылок исключаются затраты на копирование, но теперь объект может быть изменен функцией. Иногда такое изменение недопустимо. Так к&ьс же быть, если вы хотите передать объект по ссылке

и одновременно предохранить его от изменения? Читайте дальше, и вы уз­наете об этом.

Ключевое слово const

Ключевое слово const позволяет вам объявлять переменную как константу.

После объявления с модификатором const переменная не может быть изменена. Таким образом, решение заключается в том, чтобы передать объект по ссылке и сделать его константой:

void SomeFunction(const MyStructS s) {

// какие-то действия с s return;

}

MyStructure myStruct; //. . .

someFunction(myStruct) ;

Теперь вы можете спокойно передавать по ссылке объект, не беспокоясь, что он будет изменен функцией. Обратите внимание, что при этом вызов функции остается таким же. Изменяется с помощью ключевого слова const только ее определение (и объявление).

Обратите внимание, что объект является константой только внутри функ­ции. Его можно изменить как до, так и после вызова функции (конечно, если он не был изначально объявлен как const).

Передача значений с помощью указателя принципиально не отличается от передачи по ссылке. С точки зрения синтаксиса — это лишняя головная боль, поэтому передача по ссылке более предпочтительна. Давайте возьмем функцию IncrementPosition() из первого примера в этом разделе и изменим ее так, чтобы передача аргументов осуществлялась через указатели:

Web-дизайн (с) 2010 - 2017 All rights reserved