Sobes.tech
Back to questions
Junior — Middle
66

Какие особенности и различия есть при передаче аргументов в функции в языке C++?

Companies where asked
Спецвузавтоматика

Answer from AI

sobes.tech AI

В C++ аргументы в функции можно передавать несколькими способами, каждый из которых имеет свои особенности:

  • По значению: копируется значение аргумента. Изменения внутри функции не влияют на оригинал.
  • По ссылке (&): функция получает ссылку на оригинальный объект, изменения внутри функции отражаются на аргументе.
  • По указателю (*): передаётся адрес объекта, что позволяет изменять объект, но требует проверки на nullptr.

Особенности:

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

Пример:

void foo(int val) { val = 10; }           // по значению
void bar(int& ref) { ref = 10; }          // по ссылке
void baz(int* ptr) { if(ptr) *ptr = 10; } // по указателю

int main() {
    int a = 0;
    foo(a); // a останется 0
    bar(a); // a станет 10
    baz(&a); // a станет 10
}