int abs(int x) {
return x > 0 ? x : -x; // После этого сразу выход из функции
}
// Функция, возвращающая void — процедура
void print(int i) {
cout << "Значение = " << i;
}
Математические функции объявлены в заголовочном файле <cmath>.
#include <cmath>
abs(x); floor(x); sin(x); pow(x, y); sqrt(x);
Для маленьких функций накладные расходы на вызов функции значительно превышают вычисления, производимые внутри функции. Поэтому такую функцию можно сделать встраиваемой: при компиляции тело будет встроено на место её вызова.
inline int add(int a, int b) {
return a + b;
}
int a = 3;
int c = add(a, 5); // int c = a + 5;
Слово inline
является лишь рекомендацией компилятору. На секунду вам
может показаться, что вы умнее компилятора и сами знаете, какую функцию
необходимо делать встраиваемой; в такой момент некоторые компиляторы могут даже
поддаться
вам, но помните: вы не умнее.
Ссылка — другое имя объекта («псевдоним»). Ссылка всегда инициализируется при объявлении.
int i = 5;
int &pi = i; // ссылка на i
pi = 3;
cout << i; // i == 3
void calcSquareAndPerimeter(double a, double b, double &S, double &P) {
S = a * b;
P = 2 * (a + b);
}
int main() {
double SS = 0.0, PP = 0.0;
calcSquareAndPerimeter(3.0, 4.0, SS, PP);
cout << "Perimeter: " << PP << ", Square: " << SS << "\n";
}
struct Student {
string name;
int age;
}; // точка с запятой!
int main() {
Student s {"Иванов", 19}; // Инициализация
cout << s.name << ' ' << s.age << endl;
Student s2 = s; // Независимая копия s
s2.name = "Петров";
cout << s.name; // "Иванов"
}
Желательно передавать структуру в функцию по ссылке, иначе будет передана её полная копия; const
запрещает изменение полей структуры.
void print(const Student &s) {
cout << s.name << ' ' << s.age << endl;
}