Чем отличаются две функции c++

Есть ли разница в приеме аргументов у этих функций

void func(Test const& t)
{
}

и

void func(const Test& t)
{
}

Ответы (1 шт):

Автор решения: Bloody.cpp

Нет никакой разницы. И та, и та функция будет выполняться одинаково:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

size_t func(size_t const& t)
{
    return t;
}

size_t func2(const size_t& t)
{
    return t;
}

int main() 
{
    size_t num1 = 12345;
    const size_t num2 = 12345;
    cout << func(num1) << endl;
    cout << func(num2) << endl;
    cout << func2(num1) << endl;
    cout << func2(num2) << endl;
    system("pause");
    return 1;
};

Вывод в консоль:

12345

12345

12345

12345

В принципе это логично. Вообще: компилятор и так понимает, что параметр не сможет измениться, но это не значит что const не нужно писать, ведь без него вы не сможете передать любые константные переменные/объекты:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

size_t func(size_t& t)
{
    return t;
}

size_t func2(size_t& t)
{
    return t;
}

int main() 
{
    size_t num1 = 12345;
    const size_t num2 = 12345;
    cout << func(num1) << endl;
    cout << func(num2) << endl;
    cout << func2(num1) << endl;
    cout << func2(num2) << endl;
    system("pause");
    return 1;
};

Не компилируется

И ещё: для указателей важно расположение const.

const size_t ptrName* - Это указатель на константу, он не может менять значение переменной/объекта на который указывает, но может меняться сам.

size_t const ptrName* - Это константный указатель. Он может менять переменную/объект на который указывает, но не может меняться сам.

const size_t const ptrName* - Это константный указатель на константу, несложно догадаться, что он не может менять и себя, и переменную/объект.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

const size_t get_const_t_const(const size_t* const ptr)
{
    return *ptr;
}

size_t get_t_const(size_t* const ptr)
{
    return *ptr;
}

const size_t get_const_t(const size_t* ptr)
{
    return *ptr;
}

int main() 
{
    const size_t var1 = 90;
    const size_t var2 = 100;
    size_t var3 = 110;

    const size_t* const const_t_const_ptr = &var1;
    const size_t* const_t_ptr = &var2;
    size_t* const t_const_ptr = &var3;

    cout << get_const_t_const(const_t_const_ptr) << endl;
    cout << get_t_const(t_const_ptr) << endl;
    cout << get_const_t(const_t_ptr) << endl;

    system("pause");
    return 1;
};

Вывод в консоль:

90

110

100

→ Ссылка