C++ リファレンス
C++ リファレンス
参照変数はエイリアスです。つまり、既存の変数の別の名前です。変数への参照を初期化すると、参照名または変数名を使用して変数を指すことができます。
C++ 参照とポインター
参照はポインターと混同されやすく、主に次の 3 つの違いがあります。
- null 参照はありません。参照は、有効なメモリにリンクされている必要があります。
- オブジェクトへの参照が初期化されると、別のオブジェクトを指すことはできません。ポインターは、いつでも別のオブジェクトを指すことができます。
- 参照は作成時に初期化する必要があります。ポインタはいつでも初期化できます。
C++ で参照を作成する
変数名は、変数がメモリ位置に付けるラベルと考えてください。参照は、変数がメモリ位置に付ける 2 番目のラベルと考えることができます。したがって、元の変数名または参照によって、変数の内容にアクセスできます。例えば:
int i = 17;
double d =23.5;
i と d の参照変数を次のように宣言できます。
int& r = i;
double& s = d;
これらの宣言では、 & は参照として読み取られます。したがって、最初の宣言は「r は i に初期化された整数への参照です」と読み取ることができ、2 番目の宣言は「d に初期化された double への参照です」と読み取ることができます。次の例では、int 参照と double 参照を使用しています。
#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++ 参照に関連する 2 つの重要な概念を以下に示します。
コンセプト | 説明 |
---|---|
パラメータとして参照を取ります | C++ では、関数への参照をパラメーターとして渡すことがサポートされています。これは、通常のパラメーターを渡すよりも安全です。 |
参照を返す | 参照は、他のデータ型と同様に C++ 関数から返すことができます。 |
C++ 日付と時刻
C++ 日付と時刻
C++ 標準ライブラリは、いわゆる日付型を提供しません。C++ は、日付と時刻を操作するために、C 言語から構造と関数を継承しています。日付と時刻に関連する関数と構造体を使用するには、C++ プログラムで <ctime> ヘッダー ファイルを参照する必要があります。
時間に関連する型には、clock_t、time_t、size_t、 および tmの 4 つがあります。タイプ clock_t、size_t、および time_t は、システムの時刻と日付をある種の整数として表すことができます。
構造体型 tm は、 日付と時刻を C 構造体の形式で保存します。tm 構造体の定義は次のとおりです。
struct 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 の範囲の曜日from Sunday int tm_yday; // 1 月 1 日から数えて 0 ~ 365 の範囲の年間通算日 int tm_isdst; // サマータイム }
以下は、C/C++ の日付と時刻に関連する重要な関数です。これらの関数はすべて C/C++ 標準ライブラリの一部です。C++ 標準ライブラリで各関数の詳細を確認できます。
シリアルナンバー | 機能と説明 |
---|---|
1 | time_t time(time_t *time); この関数は、システムの現在のカレンダー時刻 (1970 年 1 月 1 日から経過した秒数) を返します。システムに時間がない場合は .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 ); この関数は、文字列へのポインタを返します。このポインタには、time が指す構造体に格納された情報が含まれており、戻り形式は次のとおりです: 日 月 日 時間:分:秒 年\n \ 0. |
6 | struct tm *gmtime(const time_t *time); この関数は時間へのポインタを返し、時間はグリニッジ標準時 (GMT) とも呼ばれる協定世界時 (UTC) で表される tm 構造体です。 |
7 | time_t mktime(struct tm *time); この関数は、time が指す構造体に格納されている時刻に相当するカレンダー時刻を返します。 |
8 | double difftime ( time_t time2, time_t time1 ); この関数は、time1 と time2 の差を秒単位で返します。 |
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;
}
上記のコードをコンパイルして実行すると、次の結果が生成されます。
ローカルの日付と時刻: 2011 年 1 月 8 日土曜日 20:07:41 UTC 日付と時刻: 2011 年 1 月 9 日日曜日 03:07:41
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;
}
上記のコードをコンパイルして実行すると、次の結果が生成されます。
1970 年 1 月 1 日から現在までの経過秒数: 1524456057 年: 2018 月: 4 日 : 23 時刻: 5:1:58