プログラマーの卵の日記

備忘録になってます!小難しそうなことから超簡単なことまでやってます!!

【C++】else ifでnullチェック漏れ

とある本読んでたら「えっ、この書き方どうなんの…?」と思ってやってみたら「nullチェックすり抜けるや~ん」っていう。


int main()
{
	const char* strA = nullptr;
	const char* strB = "aiueo";

	if (strA != nullptr)
	{
		// strAがnullptrでなかったら通る
		std::cout << ((strA != nullptr) ? strA : "nullptr") << std::endl;
		std::cout << ((strB != nullptr) ? strB : "nullptr") << std::endl;
	}
	else if (strB != nullptr)
	{
		// strBがnullptrでなかったら通る
		// ということでここ通りまぁす
		std::cout << ((strA != nullptr) ? strA : "nullptr") << std::endl;
		std::cout << ((strB != nullptr) ? strB : "nullptr") << std::endl;
	}
	else
	{
		// strAとstrBがnullptrだったら通る
		std::cout << ((strA != nullptr) ? strA : "nullptr") << std::endl;
		std::cout << ((strB != nullptr) ? strB : "nullptr") << std::endl;
	}

	return 0;
}

 

 

 

この書き方すれば問題ないねぇっていう。

まぁそうそうelse ifみたいな書き方しないと思うけど、内容次第では楽だと思って書きそうだけれども。


int main()
{
	const char* strA = nullptr;
	const char* strB = "aiueo";

	if (strA && strB)
	{
		// 両方nullチェックして通らさない
		std::cout << ((strA) ? strA : "nullptr") << std::endl;
		std::cout << ((strB) ? strB : "nullptr") << std::endl;
	}
	else
	{
		// 両方nullチェックしてダメだったら
		std::cout << ((strA) ? strA : "nullptr") << std::endl;
		std::cout << ((strB) ? strB : "nullptr") << std::endl;
	}

	return 0;
}