名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | language
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (非推奨)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
const/volatile
constexpr (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
  • 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

[編集]