詳細はC++const修飾子です。
概要
constはconstantの略語で、不変の意味です。C++の中で内蔵型変数を修飾するために用いられます。ユーザー定義の対象、メンバー関数、戻り値、関数パラメータ。constは私達の不用意な操作を避けるために助けてくれます。
constを使用して、関連するデータを定数として定義します。constはデータを一定の範囲で共有することができます。また、任意に変更されないことを保証します。
constは以下を含む通常オブジェクト 常ポインタ 常引用 通常のオブジェクト
データメンバーが変わらないようにする必要があるオブジェクトを、常にオブジェクトとして宣言することができます。常にオブジェクト中のすべてのメンバーの値を変更することはできません。
変数の2つのフォーマット:
常メンバー関数
通常のオブジェクトのデータメンバーを参照するには、メンバー関数をconst関数、すなわち通常のメンバー関数として宣言する必要があります。通常のメンバー関数はオブジェクト中のデータメンバーにアクセスすることができますが、通常のオブジェクト中のデータメンバーの値を変更することはできません。
くりを一つあげる:
Timeクラス:
10:10:10
注:constは関数の種類の一部です。宣言関数と定義関数の両方にconstキーワードがあります。
レギュラーメンバー
キーワードconstを使って定数データのメンバーを宣言すると、その値が変更できないことが制限されます。
Timeクラス:
通常のオブジェクトのメンバー関数はconstを追加していません。コンパイルシステムは非constメンバー関数と考えています。
常にオブジェクトを変更する制限
オブジェクトが通常オブジェクトとして宣言されている場合は、システムによって自動的に呼び出された暗黙的なコンストラクタとコンストラクタを除いて、オブジェクトの非const型のメンバ関数を呼び出すことができません。
ポイント:編集システムは、通常のオブジェクトのメンバー関数が呼び出されていることが発見された限り、関数はconstとして宣言されていないので、エラーを報告します。 防止関数は、経常オブジェクト中のデータメンバの値を変更する を防止する。コンパイルシステムは安全でない要素をブロックして、私達の開発者のために多くの心を省きました。 常メンバ関数で常変数を参照する 常針
ポインタ変数をconst型として宣言します。ポインタ値は常に初期値として維持されています。変更できません。
オブジェクトを指す通常のポインタの書式:
変数へのポインタ変数を定義する一般的な形式は次の通りです。
変数へのポインタ変数は、constとして宣言されていない変数を指しますが、このポインタ変数によって変数の値を変更することはできません。
ポイント:
変数が変数/オブジェクトとして宣言されている場合、私たちは変数を指すポインタでしか彼を指しません。
オブジェクトを指すポインタ
オブジェクトを指すポインタ変数を定義する一般的な形式は?
オブジェクトが通常のオブジェクトとして宣言されている場合、私たちは通常のオブジェクトを指すポインタでしか彼を指すことができません。非const型変数/オブジェクトを指すポインタで彼を指すことはできません。
通常のオブジェクトを指すポインタ変数は、constとして宣言されていないオブジェクトを指してもよいが、このポインタによってオブジェクトの値を変更することはできない。例えば、
結び目
オブジェクトを指すポインタは、最も一般的な言語関数のイメージを保護して、オブジェクトが関数実行中に変更されないようにします。
関数を呼び出したいときには、オブジェクトの値が変更されないようにするには、フォームを通常のオブジェクトに対するポインタ変数として定義し、オブジェクトのアドレスを実際の参照として使用します。
オブジェクトの常に引用
変数の適用は変数の別名です。変数名と参照名は同じセグメントに単元が保存されていないことを指します。
関数の参照は、オブジェクトの参照とすることができます。実際の参照値を関数で変更したくない場合は、形の参照として宣言することができます。例えば、は、データの安全を保証することができ、データを任意に変更することができないようにする。 は、関数を呼び出したときに実参加のCopyを確立する必要がなく、プログラムの実行効率を向上させることができる 。
締め括りをつける
ここでC++const修饰符に関する文章を紹介します。C++const修饰符に関する内容は以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
constはconstantの略語で、不変の意味です。C++の中で内蔵型変数を修飾するために用いられます。ユーザー定義の対象、メンバー関数、戻り値、関数パラメータ。constは私達の不用意な操作を避けるために助けてくれます。
constを使用して、関連するデータを定数として定義します。constはデータを一定の範囲で共有することができます。また、任意に変更されないことを保証します。
constは以下を含む
データメンバーが変わらないようにする必要があるオブジェクトを、常にオブジェクトとして宣言することができます。常にオブジェクト中のすべてのメンバーの値を変更することはできません。
変数の2つのフォーマット:
const [( )];
const [( )];
通常のオブジェクトには初期値が必要です。たとえば、
Time const t1(12, 34, 46);
const Time t1(12, 34, 46);
通常のオブジェクトを変更しようとするメンバーの値は何がありますか?
int main() {
const Time t1(10, 10, 10); // const Time
t1.set_time(2,2,2); // t1 ,
return 0;
}
:
C:\Users\Windows\CLionProjects\Project1\main.cpp: In function 'int main()':
C:\Users\Windows\CLionProjects\Project1\main.cpp:10:22: error: passing 'const Time' as 'this' argument discards qualifiers [-fpermissive]
t1.set_time(2,2,2);
^
In file included from C:\Users\Windows\CLionProjects\Project1\main.cpp:2:
C:\Users\Windows\CLionProjects\Project1\Time.h:12:10: note: in call to 'void Time::set_time(int, int, int)'
void set_time(int h, int m=0, int s=0);
^~~~~~~~
mingw32-make.exe[3]: *** [CMakeFiles\Project1.dir\build.make:81: CMakeFiles/Project1.dir/main.cpp.obj] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:94: CMakeFiles/Project1.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:101: CMakeFiles/Project1.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:136: Project1] Error 2
通常対象メンバー常メンバー関数
通常のオブジェクトのデータメンバーを参照するには、メンバー関数をconst関数、すなわち通常のメンバー関数として宣言する必要があります。通常のメンバー関数はオブジェクト中のデータメンバーにアクセスすることができますが、通常のオブジェクト中のデータメンバーの値を変更することはできません。
くりを一つあげる:
Timeクラス:
#ifndef PROJECT1_TIME_H
#define PROJECT1_TIME_H
class Time {
private:
int minute;
int second;
public:
int hour;
Time(); //
Time(int h, int m=0, int s=0); //
void set_time(int h, int m=0, int s=0);
void show_time() const; //
};
#endif //PROJECT1_TIME_H
Time.cpp:
#include "Time.h"
#include <iostream>
using namespace std;
//
Time::Time() : hour(0), minute(0), second(0) {}
//
Time::Time(int h, int m, int s) : hour(h), minute(m), second(s) {}
void Time::set_time(int h, int m, int s) {
hour = h;
minute = m;
second = s;
}
void Time::show_time() const {
cout << hour << ":" << minute << ":" << second << endl;
}
メール:
#include "Time.h"
#include <iostream>
using namespace std;
int main() {
const Time t1(10, 10, 10); // const Time
t1.show_time(); //
return 0;
}
デバッグ出力:10:10:10
注:constは関数の種類の一部です。宣言関数と定義関数の両方にconstキーワードがあります。
レギュラーメンバー
キーワードconstを使って定数データのメンバーを宣言すると、その値が変更できないことが制限されます。
Timeクラス:
#ifndef PROJECT1_TIME_H
#define PROJECT1_TIME_H
class Time {
private:
public:
const int hour; // hour
int minute;
int second;
Time(); //
Time(int h, int m=0, int s=0); //
void set_time(int m=0, int s=0);
void show_time() const; //
};
#endif //PROJECT1_TIME_H
hourは常データのメンバーなので、構造関数のパラメータ初期化テーブルを通して常データのメンバーを初期化するしかないです。
//
Time::Time() : hour(0), minute(0), second(0) {}
//
Time::Time(int h, int m, int s) : hour(h), minute(m), second(s) {}
私たちは再構築関数で定数データのメンバーを初期化することができません。例えば、
Time::Time(int h){hour=h;} //
メンバー関数で定数データのメンバーの値を変更することはできません。
void Time::setHour(int h){hour=h;} //
データメンバーアクセス制限通常のオブジェクトのメンバー関数はconstを追加していません。コンパイルシステムは非constメンバー関数と考えています。
常にオブジェクトを変更する制限
オブジェクトが通常オブジェクトとして宣言されている場合は、システムによって自動的に呼び出された暗黙的なコンストラクタとコンストラクタを除いて、オブジェクトの非const型のメンバ関数を呼び出すことができません。
ポイント:
ポインタ変数をconst型として宣言します。ポインタ値は常に初期値として維持されています。変更できません。
オブジェクトを指す通常のポインタの書式:
*const ;
Time time1(10, 12, 15), t2;
Time * const pt = &t1 // pt
pt = &t2; //
一般的な用途:一つのポインタを一つのオブジェクトに固定的に接続します。定数ポインタを関数としてイメージします。目的は、関数の実行中にポインタ変数の値を変更することができないことです。
void doSomething(Test * const p1){
p1 -> setX(5);
p1 -> printxy();
}
変数へのポインタ変数へのポインタ変数を定義する一般的な形式は次の通りです。
const * / const * ;
変数のポインターだけが変数を指すことができます。変数へのポインタ変数は、constとして宣言されていない変数を指しますが、このポインタ変数によって変数の値を変更することはできません。
ポイント:
変数が変数/オブジェクトとして宣言されている場合、私たちは変数を指すポインタでしか彼を指しません。
オブジェクトを指すポインタ
オブジェクトを指すポインタ変数を定義する一般的な形式は?
const * / const * ;
くりを一つあげる:オブジェクトが通常のオブジェクトとして宣言されている場合、私たちは通常のオブジェクトを指すポインタでしか彼を指すことができません。非const型変数/オブジェクトを指すポインタで彼を指すことはできません。
通常のオブジェクトを指すポインタ変数は、constとして宣言されていないオブジェクトを指してもよいが、このポインタによってオブジェクトの値を変更することはできない。例えば、
結び目
オブジェクトを指すポインタは、最も一般的な言語関数のイメージを保護して、オブジェクトが関数実行中に変更されないようにします。
関数を呼び出したいときには、オブジェクトの値が変更されないようにするには、フォームを通常のオブジェクトに対するポインタ変数として定義し、オブジェクトのアドレスを実際の参照として使用します。
オブジェクトの常に引用
変数の適用は変数の別名です。変数名と参照名は同じセグメントに単元が保存されていないことを指します。
関数の参照は、オブジェクトの参照とすることができます。実際の参照値を関数で変更したくない場合は、形の参照として宣言することができます。例えば、
void fun(Time &t);
void fun(const Time &); //
私たちはできるだけ関数パラメータとして通常参照を使用すべきです。締め括りをつける
ここでC++const修饰符に関する文章を紹介します。C++const修饰符に関する内容は以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。