C++ std::optional: Representing Optional Values

🚀 𝗠𝗼𝗱𝗲𝗿𝗻 𝗖++ 𝗙𝗲𝗮𝘁𝘂𝗿𝗲: 𝗦𝘁𝗱::𝗢𝗽𝘁𝗶𝗼𝗻𝗮𝗹 (𝗖++𝟭𝟳) How do you represent 𝗮 𝘃𝗮𝗹𝘂𝗲 𝘁𝗵𝗮𝘁 𝗺𝗶𝗴𝗵𝘁 𝗻𝗼𝘁 𝗲𝘅𝗶𝘀𝘁 in C++? For years developers relied on 𝗼𝗹𝗱 𝗽𝗮𝘁𝘁𝗲𝗿𝗻𝘀 like: ❌ nullptr ❌ 𝗺𝗮𝗴𝗶𝗰 𝘃𝗮𝗹𝘂𝗲𝘀 such as -1 ❌ 𝗰𝗼𝗺𝗽𝗹𝗲𝘅 𝗲𝗿𝗿𝗼𝗿 𝗳𝗹𝗮𝗴𝘀 Modern C++ introduced a 𝗰𝗹𝗲𝗮𝗻𝗲𝗿 𝗮𝗻𝗱 𝘀𝗮𝗳𝗲𝗿 𝘀𝗼𝗹𝘂𝘁𝗶𝗼𝗻. 💡 std::optional 𝗿𝗲𝗽𝗿𝗲𝘀𝗲𝗻𝘁𝘀 𝗮𝗻 𝗼𝗯𝗷𝗲𝗰𝘁 𝘁𝗵𝗮𝘁 𝗺𝗮𝘆 𝗼𝗿 𝗺𝗮𝘆 𝗻𝗼𝘁 𝗰𝗼𝗻𝘁𝗮𝗶𝗻 𝗮 𝘃𝗮𝗹𝘂𝗲. ❌ 𝗢𝗹𝗱 𝗔𝗽𝗽𝗿𝗼𝗮𝗰𝗵 int findUserId(const std::string& name) { if(name == "Alice") return 42; return -1; // magic value } Here -1 acts as a 𝗵𝗶𝗱𝗱𝗲𝗻 𝗺𝗲𝗮𝗻𝗶𝗻𝗴 value. This leads to: ❌ 𝗺𝗮𝗴𝗶𝗰 𝗻𝘂𝗺𝗯𝗲𝗿𝘀 ❌ 𝗵𝗮𝗿𝗱-𝘁𝗼-𝗿𝗲𝗮𝗱 𝗔𝗣𝗜𝘀 ❌ 𝗽𝗼𝘁𝗲𝗻𝘁𝗶𝗮𝗹 𝗯𝘂𝗴𝘀 ✅ 𝗠𝗼𝗱𝗲𝗿𝗻 𝗖++ 𝗔𝗽𝗽𝗿𝗼𝗮𝗰𝗵 #include <optional> std::optional<int> findUserId(const std::string& name) { if(name == "Alice") return 42; return std::nullopt; } Now the API 𝗲𝘅𝗽𝗹𝗶𝗰𝗶𝘁𝗹𝘆 𝘀𝗮𝘆𝘀 that the result 𝗺𝗮𝘆 𝗯𝗲 𝗺𝗶𝘀𝘀𝗶𝗻𝗴. 📦 𝗨𝘀𝗮𝗴𝗲 auto id = findUserId("Bob"); if(id) { std::cout << "User ID: " << *id; } else { std::cout << "User not found"; } This makes the code 𝗰𝗹𝗲𝗮𝗿𝗲𝗿, 𝘀𝗮𝗳𝗲𝗿, 𝗮𝗻𝗱 𝗺𝗼𝗿𝗲 𝗲𝘅𝗽𝗿𝗲𝘀𝘀𝗶𝘃𝗲. ⚡ 𝗪𝗵𝘆 𝗱𝗲𝘃𝗲𝗹𝗼𝗽𝗲𝗿𝘀 𝗹𝗼𝘃𝗲 std::optional ✔ 𝗘𝘅𝗽𝗿𝗲𝘀𝘀𝗲𝘀 𝗶𝗻𝘁𝗲𝗻𝘁 𝗰𝗹𝗲𝗮𝗿𝗹𝘆 ✔ 𝗘𝗹𝗶𝗺𝗶𝗻𝗮𝘁𝗲𝘀 𝗺𝗮𝗴𝗶𝗰 𝘃𝗮𝗹𝘂𝗲𝘀 ✔ 𝗜𝗺𝗽𝗿𝗼𝘃𝗲𝘀 𝗔𝗣𝗜 𝗱𝗲𝘀𝗶𝗴𝗻 ✔ 𝗠𝗮𝗸𝗲𝘀 𝗰𝗼𝗱𝗲 𝗺𝗼𝗿𝗲 𝗿𝗲𝗮𝗱𝗮𝗯𝗹𝗲 🧠 𝗞𝗲𝘆 𝗜𝗻𝘀𝗶𝗴𝗵𝘁 std::optional is not just a container. It is a 𝗱𝗲𝘀𝗶𝗴𝗻 𝘀𝗶𝗴𝗻𝗮𝗹 that clearly communicates: 👉 “𝗔 𝘃𝗮𝗹𝘂𝗲 𝗺𝗮𝘆 𝗼𝗿 𝗺𝗮𝘆 𝗻𝗼𝘁 𝗲𝘅𝗶𝘀𝘁.” And that clarity alone can 𝗽𝗿𝗲𝘃𝗲𝗻𝘁 𝘀𝘂𝗯𝘁𝗹𝗲 𝗯𝘂𝗴𝘀. 🏆 𝗧𝗮𝗸𝗲𝗮𝘄𝗮𝘆 Modern C++ is moving toward 𝗲𝘅𝗽𝗿𝗲𝘀𝘀𝗶𝘃𝗲 𝗔𝗣𝗜𝘀 and 𝗰𝗹𝗲𝗮𝗿 𝗶𝗻𝘁𝗲𝗻𝘁. std::optional turns 𝗶𝗺𝗽𝗹𝗶𝗰𝗶𝘁 𝗮𝗯𝘀𝗲𝗻𝗰𝗲 into 𝗲𝘅𝗽𝗹𝗶𝗰𝗶𝘁 𝗱𝗲𝘀𝗶𝗴𝗻. Small feature. 𝗛𝘂𝗴𝗲 𝗶𝗺𝗽𝗮𝗰𝘁 𝗼𝗻 𝗰𝗼𝗱𝗲 𝗰𝗹𝗮𝗿𝗶𝘁𝘆. #CPP #ModernCPP #SoftwareEngineering #CPP17 #Programming #CleanCode Follow for more Modern C++ insights. — 𝗔𝗕𝗛𝗜𝗦𝗛𝗘𝗞 𝗦𝗜𝗡𝗛𝗔

  • text

To view or add a comment, sign in

Explore content categories