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