Sök…
Introduktion
Traditionellt sett är ett bokstavligt uttryck som betecknar en konstant vars typ och värde framgår av dess stavning. Till exempel är 42
en bokstavlig, medan x
inte är eftersom man måste se sin förklaring för att känna till sin typ och läsa tidigare kodrader för att veta dess värde.
Emellertid har C ++ 11 också lagt till användardefinierade bokstäver , som inte är bokstäver i traditionell mening men kan användas som en kortfattning för funktionssamtal.
Sann
Ett nyckelord som anger ett av de två möjliga värdena för typ bool
.
bool ok = true;
if (!f()) {
ok = false;
goto end;
}
falsk
Ett nyckelord som anger ett av de två möjliga värdena för typ bool
.
bool ok = true;
if (!f()) {
ok = false;
goto end;
}
nullptr
Ett nyckelord som anger en nollpekarkonstant. Den kan konverteras till vilken som helst pekare eller pekare-till-medlemstyp, vilket ger en nollpekare av den resulterande typen.
Widget* p = new Widget();
delete p;
p = nullptr; // set the pointer to null after deletion
Observera att nullptr
inte själv är en pekare. Typen av nullptr
är en grundläggande typ som kallas 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
}
detta
Inom en medlemsfunktion i en klass är nyckelordet this
en pekare till förekomsten av klassen som funktionen kallades till. this
kan inte användas i en statisk medlemsfunktion.
struct S {
int x;
S& operator=(const S& other) {
x = other.x;
// return a reference to the object being assigned to
return *this;
}
};
Typen av this
beror på cv-kvalificeringen av medlemsfunktionen: om X::f
är const
, är typen av this
inom f
const X*
, så this
kan inte användas för att modifiera icke-statiska datamedlemmar från en const
medlemsfunktion. På this
ärver detta volatile
kvalifikation från den funktion den visas i.
this
kan också användas i en stag-eller-lika initialisator för en icke-statisk datamedlem.
struct S;
struct T {
T(const S* s);
// ...
};
struct S {
// ...
T t{this};
};
this
är en rvalue, så det kan inte tilldelas.
Heltal bokstavligt
Ett heltal bokstavligt är ett primärt uttryck för formen
- decimal-literal
Det är en decimal som inte är noll (1, 2, 3, 4, 5, 6, 7, 8, 9) följt av noll eller fler decimaler (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
int d = 42;
- oktal-literal
Det är siffran noll (0) följt av noll eller fler oktala siffror (0, 1, 2, 3, 4, 5, 6, 7)
int o = 052
- hex-literal
Det är karaktersekvensen 0x eller karaktersekvensen 0X följt av en eller flera hexadecimala siffror (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;
- binär-bokstavlig (sedan C ++ 14)
Det är karaktärsekvensen 0b eller karaktärsekvensen 0B följt av en eller flera binära siffror (0, 1)
int b = 0b101010; // C++14
Heltalssuffix, om det tillhandahålls, kan innehålla ett eller båda av följande (om båda tillhandahålls kan de visas i valfri ordning:
- unsigned-suffix (tecknet u eller tecknet U)
unsigned int u_1 = 42u;
- long-suffix (karaktären l eller karaktären L) eller the long-long-suffixet (karaktärsekvensen ll eller karaktärsekvensen LL) (sedan C ++ 11)
Följande variabler initialiseras också till samma värde:
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
anteckningar
Bokstäver i heltalslitteralerna är känsliga för versaler: 0xDeAdBaBeU och 0XdeadBABEu representerar samma nummer (ett undantag är det långa-långa suffixet, som är antingen ll eller LL, aldrig lL eller Ll)
Det finns inga negativa heltalslitteraler. Uttryck som -1 tillämpar operatorn unary minus på det värde som representeras av det bokstavliga, vilket kan involvera implicita typomvandlingar.
I C före C99 (men inte i C ++) tillåts icke-blandade decimalvärden som inte passar in i lång int att ha typen osignerad lång int.
När de används i ett kontrollerande uttryck för #if eller #elif fungerar alla signerade heltalskonstanter som om de har typen std :: intmax_t och alla osignerade heltalskonstanter fungerar som om de har typen std :: uintmax_t.