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
2022-09-01 16:37:41 +03:00

97 lines
No EOL
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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)
*/