2017年09月05日
《その15》 p.60 コンマ演算子,p.62 条件における宣言,p.61演習2-13
まず、p.61演習2-13 のコードを書き、そのあとで 『コンマ演算子』 と 『条件における宣言』 について考えてみます。
新版 明解C++ 入門編 p.61 演習2-13
// p061_演習2-13
#include <iostream>
using namespace std;
int main()
{
int a, b;
cout << "変数a:"; cin >> a;
cout << "変数b:"; cin >> b;
if (a < b) {
int t = a; /* ブロック内でのみ利用する変数は、
そのブロックの中で宣言する。 */
a = b;
b = t;
}
cout << "a≧bとなるようにソートしました。\n";
cout << "変数aは " << a << "です。\n";
cout << "変数bは " << b << "です。\n";
}
次に、コンマ演算子を使ってみます。どのように使うかは いろいろなやり方があるので、もっとセンスのある使い方がたくさんあると思いますが、
(`・ω・´) とりあえず・・・
新版 明解C++ 入門編 p.61 演習2-13 別解
// p061_演習2-13
#include <iostream>
using namespace std;
int main()
{
int a, b;
cout << "変数a:"; cin >> a;
cout << "変数b:"; cin >> b;
if (int t = a < b) t = a, a = b, b = t;
cout << "a≧bとなるようにソートしました。\n";
cout << "変数aは " << a << "です。\n";
cout << "変数bは " << b << "です。\n";
}
上のコードで
if (int t = a < b) t = a, a = b, b = t;
の部分が 変更箇所です。p.62 『条件における宣言』 に if文の ( ) の中に指定する《条件》は、単なる式だけでなく、変数の宣言であってもよい と書かれています。
上のコードの int t = a < b の部分です。
”=” より ”<” のほうが優先順位が上なので、まず a < b が評価され、true または false が決まります。次に、trueであれば 1、false であれば 0 が t に代入され、最後に "int t = a < b" 全体が t の値で評価されます。
なので、結果的に、条件 (int t = a < b) は (a < b) と同じ働きをすることになると思われます。
そのついでに、t の初期化も完了するんですね。
つまり、"int t = a < b" は、 ていねいに書くと、"int t = (a < b)" または "int t = (int)(a < b)" ということなんだと思います。
そして、 『コンマ演算子』を
t = a, a = b, b = t;
のようにして使ってみました。
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6667689
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック