名前空間
変種
操作

CV (定数・揮発性) 指定子

提供: cppreference.com
< cpp‎ | language
 
 
C++言語
一般的なトピック
Original:
General topics
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
フロー制御
Original:
Flow control
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
条件付き実行文
Original:
Conditional execution statements
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
繰り返し文
Original:
Iteration statements
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
文をジャンプします
Original:
Jump statements
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
機能します
Original:
Functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
関数の宣言
ラムダ関数の宣言
関数テンプレート
の歴史。インライン指定
例外仕様 (廃止予定)
noexcept指定子 (C++11)
例外
Original:
Exceptions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
名前空間
Original:
Namespaces
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
タイプ
Original:
Types
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
decltype specifier (C++11)
指定子
Original:
Specifiers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
CV指定
貯蔵期間指定
constexprの指定子 (C++11)
自動指定 (C++11)
alignas指定子 (C++11)
初期化
Original:
Initialization
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
リテラル
Original:
Literals
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Original:
Expressions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
代替表現
ユーティリティ
Original:
Utilities
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
タイプ
Original:
Types
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
typedef declaration
型の別名宣言 (C++11)
属性 (C++11)
キャストします
Original:
Casts
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
暗黙の型変換
const_cast conversion
static_cast conversion
dynamic_cast conversion
reinterpret_cast conversion
Cスタイルキャストと機能
メモリの割り当て
Original:
Memory allocation
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
クラス
Original:
Classes
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
クラス固有の機能特性
Original:
Class-specific function properties
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
明示 (C++11)
静的
特殊なメンバ関数
Original:
Special member functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
テンプレート
Original:
Templates
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
クラステンプレート
関数テンプレート
テンプレートの特殊化
パラメーターパック (C++11)
その他
Original:
Miscellaneous
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
インラインアセンブリ
 
  • const - 型は定数であると定義します.
  • volatile - 型は揮発性であると定義します.
  • mutable - クラスのメンバが、クラスの外から見える状態には影響しないことを定義します.mutableメンバは定数クラスにおいても変更することができます.つまり、指定されたメンバにおいてはクラスが定数であることが無視されることになります.

[編集] 説明

注: CV修飾子は上記の CV指定子と同じものではではありません.
CV修飾子は型のプロパティであり、CV指定子はCV修飾子を定義するための言語機能です.

CV修飾子は型の二つのプロパティ、 定数性揮発性を定義します. CV修飾子は、次のいずれかになります.'const volatile''const''volatile'または'none'. constはか型が定数であると定義し、volatile型は揮発性であると定義します.非定数かつ非揮発性の型は制約を追加しませんが、定数型と揮発性型は、以下の制約を受けます.

  • 定数 - オブジェクトは変更されないものとします.これを変更しようとしたときの挙動は未定義です.ほとんどのコンパイラでは、コンパイル時にエラーになります.
  • 揮発性 - オブジェクトはコンパイラでは検出できない手段で変更されることがあり、そのためいくつかのコンパイラの最適化を無効にする必要があります.

CV修飾子には制約が増加する順番に半順序関係があります.そのため、型は「よりCV修飾されている」と言うことができます.

  • CV非修飾 <const
  • CV非修飾 <volatile
  • CV非修飾 <const volatile
  • const < const volatile
  • volatile < const volatile

すべてのCV修飾子は型定義の一部であり、CV修飾子の異る型は、常に異なる型とみなされます.そのため、関数呼び出しや変数代入などの際には型を一致させるためにキャストが必要となります.「よりCV修飾された」型へのキャストは暗黙の型変換の一部として自動的に実行されます.具体的には、次の変換が許可されています.

  • CV非修飾型からconst型への変換
  • CV非修飾型からvolatile型への変換
  • CV非修飾型からconst volatile型への変換
  • const型からconst volatile型への変換
  • volatile型からconst volatile型への変換

「よりCV修飾された」型からされない型への変換には、const_castを使用しなければなりません.

[編集] キーワード

const, volatile, mutable

[編集]