97 lines
2.7 KiB
C++
97 lines
2.7 KiB
C++
|
#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)
|
|||
|
*/
|