サーチ…
const
型指定子。ある型に適用すると、その型のconst修飾バージョンが生成されます。参照constキーワードの意味の詳細については、 const 。
const int x = 123;
x = 456; // error
int& r = x; // error
struct S {
void f();
void g() const;
};
const S s;
s.f(); // error
s.g(); // OK
宣言型
そのオペランドの型を返します。この型は評価されません。
オペランドの場合は
e任意の追加の括弧のない名前で、その後、decltype(e)の宣言された型であるe。int x = 42; std::vector<decltype(x)> v(100, x); // v is a vector<int>オペランド
eが追加のかっこなしでクラスメンバーアクセスである場合、decltype(e)はアクセスされたメンバーの宣言された型です。struct S { int x = 42; }; const S s; decltype(s.x) y; // y has type int, even though s.x is constそれ以外の場合、
decltype(e)は式eの型と値の両方のカテゴリを次のようにdecltype(e)ます。-
eがタイプT左辺値の場合、decltype(e)はT&です。 -
eがT型のx値であれば、decltype(e)はT&&。 -
eがタイプTprvalueである場合、decltype(e)はTです。
これには、余分なかっこが含まれています。
int f() { return 42; } int& g() { static int x = 42; return x; } int x = 42; decltype(f()) a = f(); // a has type int decltype(g()) b = g(); // b has type int& decltype((x)) c = x; // c has type int&, since x is an lvalue-
特別な形式decltype(auto)は、 autoものではなくdecltype型減算ルールを使用して、変数の型をその初期化子または関数の戻り型からその定義内のreturn文からdecltypeます。
const int x = 123;
auto y = x; // y has type int
decltype(auto) z = x; // z has type const int, the declared type of x
署名された
特定の整数型の名前の一部であるキーワード。
- 単独で使用すると、
intが暗黙指定されるため、signed、signed int、およびintは同じ型です。 - 組み合わせた場合に
char型生じるsigned charとは異なるタイプである、charとしても、charまた、署名されています。signed charは、少なくとも-127〜+ 127を含む範囲を持ちます。 -
short、long、またはlong longと組み合わせると、すでに署名されているので、重複しています。 -
signedは、bool、wchar_t、char16_t、またはchar32_tと組み合わせることsignedできません。
例:
signed char celsius_temperature;
std::cin >> celsius_temperature;
if (celsius_temperature < -35) {
std::cout << "cold day, eh?\n";
}
署名されていない
整数型の符号なしバージョンを要求する型指定子。
- 単独で使用すると、
intが暗黙指定されるので、unsignedはunsigned intと同じ型です。 -
unsigned char型は、char型とは異なり、たとえcharが符号なしであっても同じです。最大255までの整数を保持できます。 -
unsignedは、short、long、またはlong longと組み合わせることもできます。bool、wchar_t、char16_t、またはchar32_tと組み合わせることはできません。
例:
char invert_case_table[256] = { ..., 'a', 'b', 'c', ..., 'A', 'B', 'C', ... };
char invert_case(char c) {
unsigned char index = c;
return invert_case_table[index];
// note: returning invert_case_table[c] directly does the
// wrong thing on implementations where char is a signed type
}
揮発性の
タイプ修飾子。ある型に適用すると、その型の揮発性修飾バージョンが生成されます。揮発性の修飾は型システムのconst修飾と同じ役割を果たしますが、 volatileはオブジェクトの変更を妨げません。その代わりに、コンパイラは、そのようなオブジェクトへのすべてのアクセスを副作用として扱わなければなりません。
場合は、以下の例では、 memory_mapped_port揮発性ではなかったことがあれば正しくないだろう唯一の最後の書き込み、実行するよう、コンパイラは、関数を最適化することができsizeof(int) 1以上であるvolatile 、それはすべての治療のための資格軍sizeof(int)は異なる副作用として書き込み、したがってすべてを(順番に)実行します。
extern volatile char memory_mapped_port;
void write_to_device(int x) {
const char* p = reinterpret_cast<const char*>(&x);
for (int i = 0; i < sizeof(int); i++) {
memory_mapped_port = p[i];
}
}