AngelScript Help

Аргументы по ссылке

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

in

Входящая ссылка только для чтения. При работе со строками может сэкономить вам памяти, так как не будет происходить копирование памяти.

void A(string& in B){ print(B); } string C = "Привет!"; void [[[main|main.html]]] { A(C); // В функцию будет передана ссылка на переменную, копирование памяти не произойдёт. A("Допустимо передавать значение напрямую без помещения в переменную"); }

const

При попытке присвоить значение входящей ссылке компилятор сгенерирует ошибку. Посему для пущей оптимизации и явного указания недопустимости записи рекомендуется явно указывать const:

void A(string& in B, const string& in C){ B = "Ошибка! Запрещено присваивать значение входящим ссылкам!"; C = "Ошибка! Аргумент C объявлен как const" }

out

Ссылка для записи выходного значения.

int divide(int a, int b, int& out remainder) { remainder = a % b; // записываем остаток от деления в переменную для выхода return a / b; // возвращаем результат деления } void [[[main|main.html]]]() { int remainder; int result = divide(10, 3, remainder); }

С помощью ключевого слова void можно сделать выходной параметр необязательным.

int divide(int a, int b, int& out remainder = void) { remainder = a % b; // записываем остаток от деления в переменную для выхода return a / b; // возвращаем результат деления } void [[[main|main.html]]]() { int result = divide(10, 3); }

inout

Ссылка для входа-выхода. Просто указывает на фактическое значение. Для обеспечения гарантии того, что ссылка будет существовать всё время существования функции разрешено передавать только ссылочные типы.

funcdef void A(); // Объявляем сигнатуру функции. void B(){ print("Функция вызвана по ссылке"); } void C(A& D){ D(); // Вызываем функцию, переданную по ссылке }; void [[[main|main.html]]](){ C(@B); // Передаём функцию по ссылке }
Last modified: 16 October 2024