Ссылки на С++
Ссылки на С++
Ссылочная переменная — это псевдоним, то есть другое имя существующей переменной. Как только вы инициализируете ссылку на переменную, вы можете использовать имя ссылки или имя переменной, чтобы указать на переменную.
Ссылки C++ против указателей
Ссылки легко спутать с указателями, и между ними есть три основных отличия:
- Нулевых ссылок нет. Ссылки должны быть связаны с действительной частью памяти.
- После инициализации ссылки на объект она не может указывать на другой объект. Указатель может указывать на другой объект в любое время.
- Ссылки должны быть инициализированы во время создания. Указатели могут быть инициализированы в любое время.
Создать ссылку на C++
Просто подумайте об имени переменной как о метке, которую переменная прикрепляет к ячейке памяти, и вы можете думать о ссылке как о второй метке, которую переменная прикрепляет к ячейке памяти. Таким образом, вы можете получить доступ к содержимому переменной по ее исходному имени или по ссылке. Например:
int i = 17;
double d =23.5;
Мы можем объявить ссылочные переменные для i и d следующим образом:
int& r = i;
double& s = d;
В этих объявлениях & читается как ссылка . Таким образом, первое объявление может читаться как «r — это ссылка на целое число, инициализированное значением i», а второе объявление может читаться как «s — это ссылка на двойное число, инициализированное значением d». В следующем примере используются int и двойные ссылки:
#include <iostream>
using namespace std;
int main (){
// 声明简单的变量
int i;
double d;
// 声明引用变量
int& r = i;
double& s = d;
i = 5;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r << endl;
d = 11.7;
cout << "Value of d : " << d << endl;
cout << "Value of d reference : " << s << endl;
return 0;
}
Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат:
Значение i : 5 Значение ссылки i: 5 Значение d : 11,7 Значение d ссылки: 11,7
Ссылки обычно используются в списках параметров функций и возвращаемых значениях функций. Ниже перечислены две важные концепции, связанные со ссылками на C++, о которых должны знать программисты на C++.
концепция | описывать |
---|---|
принимает ссылку в качестве параметра | C++ поддерживает передачу ссылок на функции в качестве параметров, что безопаснее, чем передача обычных параметров. |
вернуть ссылку | Ссылки могут быть возвращены из функций C++, как и любой другой тип данных. |
C++ Дата и время
C++ Дата и время
Стандартная библиотека C++ не предоставляет так называемый тип даты. C++ наследует структуры и функции языка C для управления датой и временем. Чтобы использовать функции и структуры, связанные с датой и временем, в программе на C++ необходимо сослаться на заголовочный файл <ctime>.
Существует четыре типа, связанных со временем: clock_t, time_t, size_t и tm . Типы clock_t, size_t и time_t могут представлять системное время и дату в виде целого числа.
Тип структуры tm сохраняет дату и время в виде структуры C, а определение структуры tm выглядит следующим образом:
структура тм { int tm_sec; // секунды, обычно от 0 до 59, но допускается до 61 int tm_min; // минуты, диапазон от 0 до 59 int tm_hour; // час, диапазон от 0 до 23 int tm_mday; // день месяца, диапазон от 1 до 31 int tm_mon; // месяц, диапазон от 0 до 11 int tm_year;//количество лет с 1900 года int tm_wday; // день недели от 0 до 6, считая с воскресенья int tm_yday; // день года в диапазоне от 0 до 365, считая с 1 января int tm_isdst; // летнее время }
Ниже приведены важные функции, связанные с датой и временем в C/C++. Все эти функции являются частью стандартной библиотеки C/C++, вы можете проверить подробности каждой функции в стандартной библиотеке C++.
серийный номер | описание функции |
---|---|
1 | time_t time(time_t *time); Эта функция возвращает текущее календарное время системы, количество секунд, прошедших с 1 января 1970 года. Возвращает .1, если в системе нет времени. |
2 | char *ctime(const time_t *time); Возвращает указатель строки, представляющий местное время, в форме день месяц год часы:минуты:секунды год\n . |
3 | struct tm *localtime(const time_t *time); Эта функция возвращает указатель на структуру tm , представляющую местное время. |
4 | clock_t clock(void); Эта функция возвращает время, использованное часами процессора с начала выполнения программы (обычно с начала программы). Возвращает .1, если время недоступно. |
5 | char * asctime ( const struct tm * time ); Эта функция возвращает указатель на строку, которая содержит информацию, хранящуюся в структуре, на которую указывает время, и формат возврата: день месяц дата часы:минуты:секунды год\n \ 0. |
6 | struct tm *gmtime(const time_t *time); Эта функция возвращает указатель на время, а время представляет собой структуру tm, выраженную в универсальном скоординированном времени (UTC), также известном как среднее время по Гринвичу (GMT). |
7 | time_t mktime(struct tm *time); Эта функция возвращает календарное время, которое эквивалентно времени, хранящемуся в структуре, на которую указывает time. |
8 | double difftime ( time_t time2, time_t time1 ); Эта функция возвращает разницу в секундах между временем1 и временем2. |
9 | size_t strftime(); Эту функцию можно использовать для форматирования даты и времени в указанном формате. |
текущая дата и время
В следующем примере получаются текущая системная дата и время, включая местное время и всемирное координированное время (UTC).
#include <iostream>
#include <ctime>
using namespace std;
int main( )
{
// 基于当前系统的当前日期/时间
time_t now = time(0);
// 把 now 转换为字符串形式
char* dt = ctime(&now);
cout << "本地日期和时间:" << dt << endl;
// 把 now 转换为 tm 结构
tm *gmtm = gmtime(&now);
dt = asctime(gmtm);
cout << "UTC 日期和时间:"<< dt << endl;
}
Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат:
Местная дата и время: суббота, 8 января, 20:07:41 2011 г. Дата и время UTC: воскресенье, 9 января, 03:07:41 2011 г.
форматировать время с помощью struct tm
Структура tm особенно важна при работе с датой и временем в C/C++. Структура tm содержит дату и время как структура C. Большинство функций, связанных со временем, используют структуру tm. В следующих примерах используется структура tm и различные функции, связанные с датой и временем.
Прежде чем практиковаться в использовании структур, вам необходимо иметь общее представление о структурах C и о том, как использовать оператор стрелка -> для доступа к элементам структуры.
#include <iostream>
#include <ctime>
using namespace std;
int main(){
// 基于当前系统的当前日期/时间
time_t now = time(0);
cout << "1970年1月1日到目前经过的秒数:" << now << endl;
tm *ltm = localtime(&now);
// 输出 tm 结构的各个组成部分
cout << "年: "<< 1900 + ltm->tm_year << endl;
cout << "月: "<< 1 + ltm->tm_mon<< endl;
cout << "日: "<< ltm->tm_mday << endl;
cout << "时间: "<< 1 + ltm->tm_hour << ":";
cout << 1 + ltm->tm_min << ":";
cout << 1 + ltm->tm_sec << endl;
}
Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат:
Количество секунд, прошедших с 1 января 1970 года по настоящее время: 1524456057. Год: 2018 месяцев: 4 День: 23 Время: 5:1:58