サーチ…
前書き
伝統的に、リテラルは、型と値がそのスペルから明らかな定数を表す式です。例えば、 42
はリテラルですが、 x
はその型を知り、その値を知るために前の行のコードを読むために宣言を見なければならないので、 x
はありません。
しかし、C ++ 11では、 ユーザー定義のリテラルも追加されています 。これは従来の意味ではリテラルではありませんが、関数呼び出しの省略形として使用できます。
真実
bool
型の2つの値のいずれかを示すキーワード 。
bool ok = true;
if (!f()) {
ok = false;
goto end;
}
偽
bool
型の2つの値のいずれかを示すキーワード 。
bool ok = true;
if (!f()) {
ok = false;
goto end;
}
nullptr
NULLポインタ定数を示すキーワード 。任意のポインタまたはメンバーへのポインタ型に変換して、結果の型のNULLポインタを生成できます。
Widget* p = new Widget();
delete p;
p = nullptr; // set the pointer to null after deletion
nullptr
自体がポインタではないことに注意してください。 nullptr
の型は、 std::nullptr_t
として知られる基本型std::nullptr_t
。
void f(int* p);
template <class T>
void g(T* p);
void h(std::nullptr_t p);
int main() {
f(nullptr); // ok
g(nullptr); // error
h(nullptr); // ok
}
この
クラスのメンバ関数内では、 キーワード this
は、関数が呼び出されたクラスのインスタンスへのポインタです。 this
静的メンバ関数で使用することはできません。
struct S {
int x;
S& operator=(const S& other) {
x = other.x;
// return a reference to the object being assigned to
return *this;
}
};
タイプthis
メンバ関数のCV-資格に依存する:場合X::f
あるconst
、その後の種類this
内f
あるconst X*
ので、 this
内から非静的データメンバを変更するために使用することができませんconst
メンバー関数。同様に、 this
は、それが現れる関数からのvolatile
資格を継承します。
this
は、静的でないデータメンバのブレースまたはイコールイニシャライザでも使用できます。
struct S;
struct T {
T(const S* s);
// ...
};
struct S {
// ...
T t{this};
};
this
は右辺値なので、代入することはできません。
整数リテラル
整数リテラルは、フォームの主な式です
- 10進リテラル
0以上の10進数(1,2,3,4,5,6,7,8,9)、0以上の10進数(0,1,2,3,4,5,6,7,8,9) 7,8,9)
int d = 42;
- 8進リテラル
0または1以上の8進数(0、1、2、3、4、5、6、7)
int o = 052
- 16進リテラル
文字シーケンス0xまたは文字シーケンス0Xの後に1つ以上の16進数字(0,1,2,3,4,5,6,7,8,9、a、A、b、B、c、C)が続きます。 、d、D、e、E、f、F)
int x = 0x2a;
int X = 0X2A;
- バイナリリテラル(C ++ 14以降)
文字シーケンス0bまたは文字シーケンス0Bの後に1つ以上の2進数字(0,1)が続きます。
int b = 0b101010; // C++14
整数 - 接尾辞は、提供されている場合は、次のいずれかまたは両方を含むことができます(両方が提供されている場合は、
- unsigned-suffix(文字uまたは文字U)
unsigned int u_1 = 42u;
- long-suffix(文字lまたは文字L)またはlong-long-suffix(文字シーケンスllまたは文字シーケンスLL)(C ++ 11以降)
次の変数も同じ値に初期化されます。
unsigned long long l1 = 18446744073709550592ull; // C++11
unsigned long long l2 = 18'446'744'073'709'550'592llu; // C++14
unsigned long long l3 = 1844'6744'0737'0955'0592uLL; // C++14
unsigned long long l4 = 184467'440737'0'95505'92LLU; // C++14
ノート
整数リテラルの文字は大文字と小文字を区別しません。0xDeAdBaBeUと0XdeadBABEuは同じ番号を表します(1つの例外はlong-long-suffixで、llまたはLL、決してlLまたはLlです)
負の整数リテラルはありません。 -1などの式は、暗黙的な型変換を伴うリテラルが表す値に単項マイナス演算子を適用します。
C99より前のC(ただしC ++ではない)では、long intに収まらない接尾辞のない10進値はunsigned long int型を持つことができます。
#ifまたは#elifの制御式で使用すると、すべての符号付き整数定数はstd :: intmax_t型を持つように動作し、すべての符号なし整数定数はstd :: uintmax_t型のように動作します。