This repository has been archived on 2023-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
mipt_cpp/seminar01_overload/classroom_tasks/code/01ref/10const_ref.cpp

97 lines
2.7 KiB
C++
Raw Normal View History

2022-09-01 16:37:41 +03:00
#include <iostream>
#include <cmath>
using std::cout, std::endl;
/*
Константные ссылки можно создать, используя ключевое слово const
int a = 10;
const int& r = a;
Это означает, что a нельзя будет изменить по этой ссылке
То есть поменять a, используя ссылку r будет нельзя:
r += 1; // Ошибка!
a += 1; // OK
Важным неочевидным отличием константных ссылок от обычных ссылок является то, что обычные ссылки
можно инициализировать только объектами, которые уже храняться в памяти (например, переменными).
int& r1 = a; // OK
int& r2 = 5; // Ошибка
Константные ссылки можно инициализировать чем угодно (нужно только чтобы тип совпадал)
const int& cr1 = a; // OK
const int& cr2 = 5; // OK
*/
int main()
{
int a = 10;
const int& r = a;
int& r1 = 20; // Это не будет компилироваться
const int& r2 = 20 // Тут всё ОК
}
/*
Задание:
1) Можно ли инициализировать ссылку таким образом?
float& r = std::sqrt(2);
Можно ли инициализировать константную ссылку таким образом?
const float& r = std::sqrt(2);
2) Пусть есть функция:
void printAgeV(int x)
{
cout << "My age is " << x << " years" << endl;
}
Можно ли вызвать её так?
int a = 10;
printAgeV(a)
Можно ли вызвать её так?
printAgeV(20)
3) Пусть есть функция:
void printAgeR(int& x)
{
cout << "My age is " << x << " years" << endl;
}
Можно ли вызвать её так?
int a = 10;
printAgeR(a)
Можно ли вызвать её так?
printAgeR(20)
4) Пусть есть функция:
void printAgeCR(const int& x)
{
cout << "My age is " << x << " years" << endl;
}
Можно ли вызвать её так?
int a = 10;
printAgeCR(a)
Можно ли вызвать её так?
printAgeCR(20)
*/