変数の宣言と定義
声明キーワードはextern
extern int a; //声明
int a; //声明并定义
extern int a = 1; //定义
変数が複数回宣言することができ、それは一度だけ定義することができます
複数のファイルを同時にconstオブジェクトを使用したい場合は、前のextern constとして追加する必要があります
extren const int a = 100;
const修飾子
const参照のために(一定の参照と呼ばれます)
例:
int i = 42;
const int &r1 = i;
const int &r2 = 42;
const int &r3 = r1 * 2;
あなたは量に非常に一定の基準を行うことができますが、基準値が一定の基準値が変更することはできません変更することはできません。
ポインタ定数
constが定数またはCONSTへのポインタにすることができます。
しかし、オブジェクトのポインタの指示値を変更することはできません。
const double pi = 3.14;
const double *cptr = π
printf("%.2lf\n",*cptr);
double dval = 3.16;
cptr = &dval;
printf("%.2lf\n",*cptr);
output:
3.14
3.16
定数ポインタ変化値を参照することができるだけでなく、他の方法で変更することができる一定のいわゆるを指すポインタ
constポインタ
即ち、オブジェクトがポインタであり、ポインタ自体が一定の配置しました
その点ポインタ自体が変更されるが、量によって指さ値を変更することはできません
int a = 0;
int *const pa = &a; //常量指针
const double pi = 3.14;
const double *const ppi = &pi //指向常量的常量指针
constのトップ
- CONSTポインタは、最上層を示し自体は、一定であります
- そして、一番下の層は、ポインタのconstを示しているの言及は一定です。
目前所见有
int *const p = &i; //顶层const
const double pi = 3.14; //顶层const
const double *ppi = π//底层const
const int &r = i; //用于声明引用的const均为底层const
CONSTは、それぞれ底部または上部である場合、定義により区別することができます。
基礎となるオブジェクトをコピーconstが、コピーインとコピーが同じ基本const修飾を持たなければならない、または両方のタイプは、両方を変換することができます。
定数式
それは変更されません、その値はコンパイル時に取得することができます
例如
const int mx = 100;
const int mxx = mx + 10;
而如下表达式就不是
const int x = get_size(); //编译过程无法得到其值,须运行时确定
int y = 10; //值不确定
constexprの修飾子
変数は、コンパイラは、変数の値が定数式ていることを確認するかどうか、constexprの型として宣言されています。
そして、関数を宣言するために使用することができるが、これらの関数は、結果コンパイラを得ることができるように十分に単純でなければならない。この関数は、変数を初期化することができconstexprの
constexpr int mf = 20;
constexpr int limit = mf + 1;
constexpr int sz = size(); //size() 为constexpr函数
ポインタと参照が厳しく制限constexprの初期値を定義しました。
すなわち、任意の関数をconstexprの変数体における変数定義関数ので、修飾されていないと、典型的には固定されたアドレスに格納されていないで定義されています。
注:このポインタは、その尖った物体の独立即ち、ポインタ定数constexprのポインタ定義がある場合。
const int *p = &i; //指向常量的指针
constexpr int *q = &j; //常量指针