🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

751閲覧

C++の演算子オーバーロードについて

xdg

総合スコア8

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/03/01 15:10

編集2021/03/01 15:18

C++の演算子オーバーロードのよくある例として、前置増分演算子と後置増分演算子がありますよね。

C++

1//前置 2C& C::operator++() 3{ 4 ++cnt; 5 return *this; 6} 7 8//後置 9C C::operator++(int) 10{ 11 c temp = *this; 12 ++*this; 13 return temp; 14} 15

ここで疑問なのですが、なぜ後置の場合は引数にダミーのintを入れるのですか?
また、後置と前置の記述は、機械側はどのように判別しているのですか?
関数のシグネチャが違う点で判別しているのはわかるんですが、なぜ引数を取るほうが後置インクリメントになって、なにもないほうが前置インクリメントになるのかわかりません。

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

C++ の設計者による C++ の歴史や考え方が書かれた本「C++ の設計と進化」に経緯が書かれています。

前置と後置を区別する書き方をどうするかというのは様々な模索があり、以下のような案もあったと述べられています。

  • キーワード prefix postfix を導入する
  • 返却値が参照かどうかで区別する
  • ++operatoroperator++ という記法で区別する

C/C++ は文法仕様を更新するときに新しい予約語を追加するのをなるべく避ける風習があります。 過去のコードで使われている変数名とかぶったらそれだけで互換性が壊れるからです。 (そうは言っても少しづつ増えているのですが。)

そのため予約語を追加する記法は論外であるとされ、返却値が参照かどうかで区別するのは難解、 ++operator はわざとらしいということで除外、結果的に今の形に落ち着きました。 はっきり言って int を引数に取るのは何も意味がありません。 他の記法よりマシだと思われたので後置のマークということにすると決まったというだけのことです。

後置と前置の記述は、機械側はどのように判別

質問の意図がよくわからないのですが、変数より前に ++ があれば前置で変数の後ろに ++ があれば後置であるという以上に何か疑問点があるのでしょうか?

投稿2021/03/01 15:43

SaitoAtsushi

総合スコア5684

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xdg

2021/03/02 06:52

ありがとうございます! 質問の意図としては、「どちらの書き方が後置で前置なのか」が最初から決まっているものとは知らなかったため、なにか書き方にそれらを決定づける要素があったのかと思ったのです。
guest

0

インクリメント演算子とデクリメント演算子のオーバーロード

i.operator++( 25 ); // Increment by 25.

このように後置インクリメントには引数を渡せるようです。

投稿2021/03/01 15:45

Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/03/02 01:27

後置インクリメントに引数を渡せることが言語仕様にちゃんと書かれていて妥当であるという補足ありがとうございます。 前置に引数を渡せず、後置に引数を渡せる以上、引数の有無で区別できるという意味の回答です。 > なぜ引数を取るほうが後置インクリメントになって、なにもないほうが前置インクリメントになるのかわかりません。
guest

0

なぜもヘッタクレもない、言語仕様がそう定めているから。

投稿2021/03/01 15:37

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問