C++ ⇒ VBA 書いて覚えるための初心者自己中記事

C++ ⇒ VBA 勉強の履歴を付けるというかノート代わりに使ってます

C++ ショートサーキット 書いて覚えるための初心者自己中記事

条件式の真偽判定は必ず最後まで行われるというわけでは無い。

 

if (1 == 2 && 3 == 4) { ... };

この条件部分では最初の

第一条件 1 == 2  は false

で、次の

&&  <-  この時点でもはや true にはならないと分かる。

3 == 4  <- ここを見るまでもない

 

結果 false

 

この判断を人間だけでなくC/C++ もやっているらしい。

さすがですね。

ショートサーキット

というらしいです。

 

しかし、このさすがな機能にもうっかりすると落とし穴があって

条件式に関数を入れておいて、真偽にかかわらずその関数は呼び出したい。

という場合に、関数を呼び出す前にショートサーキットしてしまう可能性があるということ。(ショートサーキットの言い方おかしいかもしれない)

 

戻り値の型が bool 型の関数を二つ使って && で条件式に入れたらそういう状況になりますね。

 

ショートサーキットを利用してそう言った条件にするなら問題ないですけど。

bool Input(double& n) {
	cout << "数値入力 : " << endl;
	n = 0;
	cin >> n;
	return n != 0;
}
 
int main() {
	double a, b;
	while (Input(a) && Input(b)) {
		cout << a << " / " << b << " = " << a / b << endl;
		cout << b << " / " << a << " = " << b / a << endl;
	}
	system("pause");
}

ショートサーキットを利用した良い例。

除算を行うための数値を二回入力する内容。

片方でも 0 が入力されてしまうと除算できないので、

最初の条件のIput でfalse になった段階でショートサーキットでfalse 判定されて終わる。

 

もう1つ例がある。

おっと、混乱しそう、

void Show(string* str) {
	if (! (str == NULL || str->empty())) {
		cout << *str << endl;
	}
}
 
int main() {
	Show(NULL);
 
	string str;
	Show(&str);
 
	str = "Hoge";
	Show(&str);
 
system("pause");
}

 

 

if (! (str == NULL || str->empty())) 

これな。

NULL または empty だったら true

の逆。

ということは・・?

あー。いや、これ逆にしたのは true の時にcout したかっただけなのか。

単純に NULL でtrue だったらショートサーキットさせたいという話なのか。

 

なんだよ。はりきったのに。

 

ここまで。