名前空間
変種
操作

Increment/decrement operators

提供: cppreference.com
< cpp‎ | language

 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (非推奨)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
インクリメント/デクリメント演算子インクリメントまたはデクリメントしたオブジェクトの値.
Original:
Increment/decrement operators increments or decrements the value of the object.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Operator name Syntax Over​load​able Prototype examples (for class T)
Inside class definition Outside class definition
pre-increment ++a Yes T& T::operator++(); T& operator++(T& a);
pre-decrement --a Yes T& T::operator--(); T& operator--(T& a);
post-increment a++ Yes T T::operator++(int); T operator++(T& a, int);
post-decrement a-- Yes T T::operator--(int); T operator--(T& a, int);
'注意'
Original:
Notes
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
  • の接頭フォーム組み込み演算子の戻り値の参照とpostfixのフォームの戻り値は、典型的なユーザ定義のオーバーロードは、ユーザー定義演算子は組み込みと同じように使用できるように、パターンに従います。ただし、ユーザー定義演算子のオーバーロードでは、任意の型、戻り値の型(voidを含む)として使用することができます.
    Original:
    Prefix forms of the built-in operators return references and postfix forms return values, and typical user-defined overloads follow the pattern so that the user-defined operators can be used in the same manner as the built-ins. However, in a user-defined operator overload, any type can be used as return type (including void).
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • intパラメータは、事前·事後の演算子のバージョンを区別するために使用されるダミーのパラメータです。それは、例えば、関数呼び出しの表記法を使用して演算子を呼び出すことによって変更される可能性がありますが、ユーザー定義の後置演算子が呼び出されると、そのパラメータに渡された値は、常にゼロですa.operator++(2).
    Original:
    The int parameter is a dummy parameter used to differentiate between pre- and post- in versions of the operators. When the user-defined postfix operator is called, the value passed in that parameter is always zero, although it may be changed by calling the operator using function call notation, e.g. a.operator++(2).
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

目次

[編集] 説明

プリインクリメントと'プリデクリメント演算子インクリメントまたはデクリメントしたオブジェクトの値と結果への参照を返します.
Original:
pre-increment and pre-decrement operators increments or decrements the value of the object and returns a reference to the result.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
ポストインクリメントポストデクリメント、オブジェクト、インクリメントまたはデクリメントしたオブジェクトの値のコピーが作成され、インクリメントまたはデクリメント前からコピーを返し.
Original:
post-increment and post-decrement creates a copy of the object, increments or decrements the value of the object and returns the copy from before the increment or decrement.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[編集] 内蔵前置演算子

Aよりbool他、オプションでのcv-修飾されたオブジェクト·タイプには、次の関数のシグネチャは、オーバーロードの解決に参加する毎に任意にvolatile修飾ポインタPごとに任意にvolatile修飾算術型の場合:
Original:
For every optionally volatile-qualified arithmetic type A other than bool, and for every optionally volatile-qualified pointer P to optionally cv-qualified object type, the following function signatures participate in overload resolution:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
A& operator++(A&)
bool& operator++(bool&)
(非推奨)
P& operator++(P&)
A& operator--(A&)
P& operator--(P&)
組み込みの前置インクリメントまたはデクリメント演算子のオペランドは非ブール演算型またはオブジェクト型を完了するには、ポインタの変更可能な左辺値(非const参照)でなければなりません。これらのオペランドについては、表現++xx+=1とまったく同じですし、発現--xx-=1とまったく同じです、つまり、結果は左辺値として返され、更新オペランドであり、算術演算子用に定義されたすべての算術変換規則とポインタ演算の規則が適用されます。.
Original:
The operand of a built-in prefix increment or decrement operator must be a modifiable lvalue (non-const reference) of non-boolean arithmetic type or pointer to complete object type. For these operands, the expression ++x is exactly equivalent to x+=1, and the expression --x is exactly equivalent to x-=1, that is, the result is the updated operand, returned as lvalue, and all arithmetic conversion rules and pointer arithmetic rules defined for 算術演算子 apply.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
前置インクリメント演算子のオペランドが型boolである場合は、そこに設定されているにtrue(非推奨).
Original:
If the operand of the preincrement operator is of type bool, it is set to true (非推奨).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[編集] 作り付けの後置演算子

Aよりbool他、オプションでのcv-修飾されたオブジェクト·タイプには、次の関数のシグネチャは、オーバーロードの解決に参加する毎に任意にvolatile修飾ポインタPごとに任意にvolatile修飾算術型の場合:
Original:
For every optionally volatile-qualified arithmetic type A other than bool, and for every optionally volatile-qualified pointer P to optionally cv-qualified object type, the following function signatures participate in overload resolution:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
A operator++(A&, int)
bool operator++(bool&, int)
(非推奨)
P operator++(P&, int)
A operator--(A&, int)
P operator--(P&, int)
ビルトイン後置インクリメントまたはデクリメント演算子のオペランドは非ブール演算型またはオブジェクト型を完了するためにポインタの変更可能な左辺値(非const参照)でなければなりません。結果は、オペランドの元の値をコピーですprvalueです。副作用としては、この演算子はargまたはarg += 1、それぞれインクリメントおよびデクリメントするため評価することによってであるかのように、引数arg -= 1の値が変更されます。すべての算術変換規則と算術演算子適用するために定義され、ポインタ演算のルール.
Original:
The operand of a built-in postfix increment or decrement operator must be a modifiable lvalue (non-const reference) of non-boolean arithmetic type or pointer to complete object type. The result is a prvalue, which is a copy the original value of the operand. As a side-effect, this operator modifies the value of its argument arg as if by evaluating arg += 1 or arg -= 1, for increment and decrement respectively. All arithmetic conversion rules and pointer arithmetic rules defined for 算術演算子 apply.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
後置インクリメント演算子のオペランドが型boolである場合は、そこに設定されているにtrue(非推奨).
Original:
If the operand of the postincrement operator is of type bool, it is set to true (非推奨).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[編集]

#include <iostream>
int main()
{
    int n = 1;
    int n2 = ++n;
    int n3 = ++ ++n;
    int n4 = n++;
//    int n5 = n++ ++; // compile error
//    int n5 = n + ++n; // undefined behavior
    std::cout << "n = " << n << '\n'
              << "n2 = " << n2 << '\n'
              << "n3 = " << n3 << '\n'
              << "n4 = " << n4 << '\n';
}

出力:

n = 5
n2 = 2
n3 = 4
n4 = 4

[編集] ノート

伴うため、副作用の、ビルトインインクリメント演算子とデクリメント演算子はルールのシーケンスに違反しているため、未定義の動作を避けるために注意して使用しなければなりません.
Original:
Because of the side-effects involved, built-in increment and decrement operators must be used with care to avoid undefined behavior due to violations of ルールのシーケンス.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
オブジェクトの一時コピーが動作中に構築されるため、プリインクリメントや'プリデクリメント演算子は、通常、返された値が使用されていない文脈でより効率的..
Original:
Because a temporary copy of the object is constructed during the operation, pre-increment or pre-decrement operators are usually more efficient in contexts where the returned value is not used.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[編集] 標準ライブラリ

インクリメント演算子とデクリメント演算子は、多くの標準的なライブラリー·タイプのオーバーロードされています。特に、すべてのIteratorオーバーロード演算子+ +と毎BidirectionalIteratorオーバーロード演算子 - 、これらの演算子は特定のイテレータのno-opsのない場合でも、.
Original:
Increment and decrement operators are overloaded for many standard library types. In particular, every Iterator overloads operator++ and every BidirectionalIterator overloads operator--, even if those operators are no-ops for the particular iterator.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
算術型のオーバーロード
Original:
overloads for arithmetic types
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
アトミック値を1つインクリメントまたはデクリメントします
(std::atomicのパブリックメンバ関数) [edit]
インクリメントまたはデクリメントするティック数
Original:
increments or decrements the tick count
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::chrono::durationのパブリックメンバ関数)
イテレータ型のオーバーロード
Original:
overloads for iterator types
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
進歩イテレータ
Original:
advances the iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::raw_storage_iteratorのパブリックメンバ関数)
進歩イテレータ
Original:
advances the iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::reverse_iteratorのパブリックメンバ関数)
デクリメントイテレータ
Original:
decrements the iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::reverse_iteratorのパブリックメンバ関数)
no-op
(std::back_insert_iteratorのパブリックメンバ関数)
no-op
(std::front_insert_iteratorのパブリックメンバ関数)
no-op
(std::insert_iteratorのパブリックメンバ関数)
進歩イテレータ
Original:
advances the iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::move_iteratorのパブリックメンバ関数)
デクリメントイテレータ
Original:
decrements the iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::move_iteratorのパブリックメンバ関数)
進歩istream_iterator
Original:
advances the istream_iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::istream_iteratorのパブリックメンバ関数)
no-op
(std::ostream_iteratorのパブリックメンバ関数)
進歩istreambuf_iterator
Original:
advances the istreambuf_iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::istreambuf_iteratorのパブリックメンバ関数)
no-op
(std::ostreambuf_iteratorのパブリックメンバ関数)
進歩regex_iterator
Original:
advances the regex_iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::regex_iteratorのパブリックメンバ関数)
進歩regex_token_iterator
Original:
advances the regex_token_iterator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::regex_token_iteratorのパブリックメンバ関数)

[編集] 参照

演算子の優先順位

一般的な演算子
代入 インクリメント
デクリメント
算術 論理 比較 メンバアクセス その他

a = b
a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b

++a
--a
a++
a--

+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

!a
a && b
a || b

a == b
a != b
a < b
a > b
a <= b
a >= b
a <=> b

a[b]
*a
&a
a->b
a.b
a->*b
a.*b

a(...)
a, b
? :

特殊な演算子

static_cast は型を別の関連する型に変換します。
dynamic_cast は継承階層内で変換します。
const_castcv 修飾子を追加または削除します。
reinterpret_cast は型を無関係の型に変換します。
C スタイルのキャストstatic_cast, const_cast, reinterpret_cast の混合によって型を別の型に変換します。
new は動的記憶域期間を持つオブジェクトを作成します。
delete は以前に new 式によって作成されたオブジェクトを破棄し、取得したメモリ領域を解放します。
sizeof は型のサイズを照会します。
sizeof...パラメータパックのサイズを照会します。 (C++11およびそれ以降)
typeid は型の型情報を照会します。
noexcept は式が例外を投げることができるかどうかを調べます。 (C++11およびそれ以降)
alignof は型のアライメント要件を照会します。 (C++11およびそれ以降)