nullptr
新しいC ++ 11には、NULLポインタをnullptr初期化するために追加します。nullptrは、ポインタの任意の他の型に変換することができ、リテラルの特殊なタイプです。今、私たちは、NULLポインタを初期化するためにNULLの代わりにnullptrを使用するようにしてください。
int *a = nullptr;
char *c = nullptr;
変数の宣言と定義
変数は定義することができ、一度だけ、しかし複数回宣言することができます。
extern double pi = 3.14; // 定义
int main(void)
{
extern int a; // 声明
int b; // 定义
extern double f = 0.01; // 错误:不允许对外部变量的局部声明使用初始值设定项(初始化)
}
参考文献について
リファレンス自体はオブジェクトではありません、あなたは参照の定義を初期化する必要があり、そしてそのポイントの後に定義された後に変更することはできません。
int a = 0;
int b = 1;
int &ref = a;
ref = b; // 该语句其实等价于a=b,并非将ref改成b的引用,引用一旦定义就无法改变其指向。
ポインタ定数へのポインタ
CPTRコードタイプは一定であるポインタへのダブルポインタのconstポインタです。だから、* CPTRを変更することはできませんが、piはconstのダブルではありませんので、直接変更piが合法であるので、CPTR自体は、変更することができます。
double pi = 3.14;
const double *cptr = π
pi = 3.1; // 合法
cptr = 0; // 合法
*cptr = 0; // 非法
PIPコードポイントは、CONST double型、すなわち一定のポインタ定数のconstポインタです。*ピップピップ自体をしては変更できません。CurrErrポインタながら一定であるが、それはcurrErrのcurrErr修正値を修正することができませんerrNumbを指摘しました。
int errNumb = 0;
int *const currErr = &errNumb;
const double pi = 3.14;
const double *const pip = π
constexprの定数式
C ++ 11は、変数として宣言できるように、所定のconstexprの変数の型は、コンパイラによって一定値表現され検証されるかどうか。変数は、constexprのは一定でなければならないと宣言し、定数式で初期化する必要があります。
constexpr int mf = 20;
constexpr int limit = mf + 1;
constexpr int sz = size(); // 非法,只有当size()是一个constexpr函数时正确。
constexprの文は、ポインタ、ポインタを定義する場合修飾子constexprの唯一の効果的な、関係なく、尖った-へのオブジェクトの。
コードpとqのこのタイプは、はるか、pは定数へのポインタであり、qは一定のポインタです。
const int *p = nullptr;
constexpr int *q = nullptr;
それはスタックiのアドレスであるため、CONST INT iは、文が与えられること機能に= 0の場合、可変constexprの修飾されたポインタのアドレスと、そのようなI CONST INTグローバルメモリ領域に配置するように、一定でなければなりません上、それは定数式になることができなくなりますpの値を変更します。
const int i = 0;
int main(void)
{
constexpr const int *p = &i;
}
タイプの別名
使用したタイプの方法をC ++で11の新しいエイリアス。賃金とwages2とダブルは同等です。
typedef double wages;
using wages2 = double;
wages d1;
wages2 d2;
以下の場合、CSTRのcstr2とデータ型がない同じことに注意することは、それがチャーCSTRオブジェクトポインタ定数であり、ポインタCONSTチャーcstr2オブジェクト・ポインタです。私たちは、全体としてpstringを扱うのではなく、彼の別名置換処理に戻って行く必要があります。
typedef char *pstring;
const pstring cstr = 0;
const pstring *ps;
const char *cstr2 = 0;
decltype
decltype定義する変数の型の発現値のタイプを推論する推論によって、次のように特に留意すべきコードが対応* p型ではなく、INT&INT。
const int ci = 0, &cj = ci;
decltype(ci) x = 0;
decltype(cj) y = x;
decltype(cj) z; //错误:z是一个引用,必须初始化
int i = 42, *p = &i, &r = i;
decltype(r + 0) b; //正确,b是int类型
decltype(*p) c; // 错误,*p是解引用,其得到的数据类型是引用型,必须初始化。可以理解为*p是i的别名,所以*p也是引用类型。
auto d = *p; // 正确,d是int型,要和上面的区分开来。
decltype((i)) e; // 错误,(i)会让编译器认为是一个表达式,因此是int&类型,必须初始化。