とある本読んでたら「えっ、この書き方どうなんの…?」と思ってやってみたら「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;
}