サーチ…
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
がタイプT
prvalueである場合、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];
}
}