64 lines
2.7 KiB
C++
64 lines
2.7 KiB
C++
|
#include <iostream>
|
|||
|
#include <cmath>
|
|||
|
using std::cout, std::endl;
|
|||
|
|
|||
|
/*
|
|||
|
Константные ссылки нужны прежде всего, чтобы передавать большие объекты в функции, внутри которых они не должны меняться
|
|||
|
|
|||
|
Рассмотрим структуру Book, чей размер более 100 байт
|
|||
|
|
|||
|
|
|||
|
1) При передаче такой структуры в функцию по значению, как это происходит в функции printBookV,
|
|||
|
вся структура будет копироваться внутрь функции и это очень медленно. Так делать не стоит.
|
|||
|
|
|||
|
|
|||
|
2) При передаче такой структуры в функцию по обычной ссылке, как это происходит в функции printBookR, структура не копируется
|
|||
|
На самом деле, под капотом внутрь функции копируется адрес структуры.
|
|||
|
Адрес намного меньше самой структуры, поэтому это копирование работает намного быстрее.
|
|||
|
|
|||
|
Но возникает проблема с тем, что структура внутри такой функции может поменяться.
|
|||
|
В реальной ситуации, если функций много и они большие, уследить за тем меняется ли аргументы внутри функций становится проблематично.
|
|||
|
|
|||
|
|
|||
|
3) При передаче такой структуры в функцию по константной ссылке, как это происходит в функции printBookCR, структура не копируется.
|
|||
|
Плюс к этому мы можем быть уверены, что внутри функции наша структура не поменяется и это сильно упрощает понимание программы.
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
struct Book
|
|||
|
{
|
|||
|
char title[100];
|
|||
|
int pages;
|
|||
|
float price;
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
void printBookV(Book b)
|
|||
|
{
|
|||
|
cout << b.title << ", pages = " << b.pages << ", price = " << b.price << endl;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void printBookR(Book& b)
|
|||
|
{
|
|||
|
cout << b.title << ", pages = " << b.pages << ", price = " << b.price << endl;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void printBookCR(const Book& b)
|
|||
|
{
|
|||
|
cout << b.title << ", pages = " << b.pages << ", price = " << b.price << endl;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
Book b = {"War and Peace", 1200, 900};
|
|||
|
|
|||
|
printBookV(b);
|
|||
|
printBookR(b);
|
|||
|
printBookCR(b);
|
|||
|
}
|
|||
|
|
|||
|
|