{"id":1835,"date":"2025-03-24T08:49:48","date_gmt":"2025-03-23T23:49:48","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1835"},"modified":"2025-03-24T08:49:48","modified_gmt":"2025-03-23T23:49:48","slug":"%e5%ae%8c%e5%85%a8%e8%a7%a3%e8%aa%ac%ef%bc%81stdoptional%e3%81%a7%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b%e5%ae%89%e5%85%a8%e3%81%a7%e7%be%8e%e3%81%97%e3%81%84c%e3%82%b3%e3%83%bc%e3%83%89-%e7%8f%be","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1835","title":{"rendered":"\u5b8c\u5168\u89e3\u8aac\uff01std::optional\u3067\u5b9f\u73fe\u3059\u308b\u5b89\u5168\u3067\u7f8e\u3057\u3044C++\u30b3\u30fc\u30c9 &#8211; \u73fe\u5834\u3067\u4f7f\u3048\u308b9\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">std::optional\u3068\u306f\uff1f\u30e2\u30c0\u30f3C++\u304c\u63d0\u4f9b\u3059\u308b\u7a76\u6975\u306eNull\u5b89\u5168\u6a5f\u80fd<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u5f93\u6765\u306eNull\u30dd\u30a4\u30f3\u30bf\u304c\u5f15\u304d\u8d77\u3053\u3059\u5371\u967a\u306a\u554f\u984c\u3068\u306f<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">std::optional\u306b\u3088\u3063\u3066\u5b9f\u73fe\u3055\u308c\u308b\u5b89\u5168\u306a\u5024\u306e\u53d6\u308a\u6271\u3044<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">std::optional\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">std::optional\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u3068\u521d\u671f\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u5024\u306e\u5b58\u5728\u78ba\u8a8d\u3068\u5b89\u5168\u306a\u53d6\u308a\u51fa\u3057\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u4f7f\u7528\u3057\u305f\u67d4\u8edf\u306a\u5024\u306e\u53d6\u308a\u6271\u3044<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">\u5b9f\u8df5\u7684\u306astd::optional\u306e\u6d3b\u7528\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">\u95a2\u6570\u306e\u623b\u308a\u5024\u3068\u3057\u3066\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-9\">\u6761\u4ef6\u4ed8\u304d\u5024\u306e\u53d6\u308a\u6271\u3044\u306b\u304a\u3051\u308b\u6d3b\u7528\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">\u30c1\u30a7\u30fc\u30f3\u64cd\u4f5c\u306b\u3088\u308b\u512a\u96c5\u306a\u30b3\u30fc\u30c9\u306e\u5b9f\u73fe<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">std::optional\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30e1\u30e2\u30ea\u7ba1\u7406<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">\u5185\u90e8\u5b9f\u88c5\u3068\u6700\u9069\u5316\u306e\u30e1\u30ab\u30cb\u30ba\u30e0<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-13\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-14\">std::optional\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u88c5\u4f8b\u3068\u6ce8\u610f\u70b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-15\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3067\u306e\u6d3b\u7528\u4e8b\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-16\">\u8a2d\u5b9a\u5024\u306e\u7ba1\u7406\u306b\u304a\u3051\u308b\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">\u5171\u901a\u306e\u843d\u3068\u3057\u7a74\u3068\u5bfe\u51e6\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-18\">std::optional\u3068\u4ed6\u306e\u30a8\u30e9\u30fc\u51e6\u7406\u624b\u6cd5\u306e\u4f7f\u3044\u5206\u3051<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">\u4f8b\u5916\u51e6\u7406\u3068\u306e\u9069\u5207\u306a\u7d44\u307f\u5408\u308f\u305b\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">std::variant\u3001std::any\u3068\u306e\u4f7f\u3044\u5206\u3051\u30ac\u30a4\u30c9<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">std::optional\u3068\u306f\uff1f\u30e2\u30c0\u30f3C++\u304c\u63d0\u4f9b\u3059\u308b\u7a76\u6975\u306eNull\u5b89\u5168\u6a5f\u80fd<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u5f93\u6765\u306eNull\u30dd\u30a4\u30f3\u30bf\u304c\u5f15\u304d\u8d77\u3053\u3059\u5371\u967a\u306a\u554f\u984c\u3068\u306f<\/h3>\n\n\n\n<p>C++\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u5024\u304c\u5b58\u5728\u3057\u306a\u3044\u53ef\u80fd\u6027\u3092\u8868\u73fe\u3059\u308b\u65b9\u6cd5\u3068\u3057\u3066\u9577\u5e74\u4f7f\u7528\u3055\u308c\u3066\u304d\u305fNull\u30dd\u30a4\u30f3\u30bf\u306b\u306f\u3001\u6df1\u523b\u306a\u554f\u984c\u304c\u6f5c\u3093\u3067\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u4f8b\u3067\u5177\u4f53\u7684\u306b\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5371\u967a\u306aNull\u30dd\u30a4\u30f3\u30bf\u306e\u4f8b\nstd::string* getUserName(int userId) {\n    if (userId &lt;= 0) {\n        return nullptr;  \/\/ \u7121\u52b9\u306a\u30e6\u30fc\u30b6\u30fcID\u306e\u5834\u5408\n    }\n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u53d6\u5f97\u3059\u308b\u51e6\u7406\n    return new std::string(\"John Doe\");\n}\n\nvoid processUserName() {\n    std::string* name = getUserName(-1);\n    std::cout &lt;&lt; name-&gt;length();  \/\/ \u5371\u967a\uff01NULL\u30dd\u30a4\u30f3\u30bf\u53c2\u7167\u306b\u3088\u308b\u672a\u5b9a\u7fa9\u52d5\u4f5c\n    delete name;  \/\/ \u30e1\u30e2\u30ea\u30ea\u30fc\u30af or \u4e8c\u91cd\u89e3\u653e\u306e\u53ef\u80fd\u6027\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u306b\u306f\u4ee5\u4e0b\u306e\u554f\u984c\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Null\u30dd\u30a4\u30f3\u30bf\u306e\u53c2\u7167\u5916\u3057\u306b\u3088\u308b\u672a\u5b9a\u7fa9\u52d5\u4f5c<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u8cac\u4efb\u304c\u547c\u3073\u51fa\u3057\u5074\u306b\u8ee2\u5ac1\u3055\u308c\u308b<\/li>\n\n\n\n<li>Null\u30c1\u30a7\u30c3\u30af\u306e\u5fd8\u308c\u306b\u3088\u308b\u30d0\u30b0\u306e\u767a\u751f<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u72b6\u614b\u306e\u610f\u56f3\u304c\u4e0d\u660e\u78ba<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">std::optional\u306b\u3088\u3063\u3066\u5b9f\u73fe\u3055\u308c\u308b\u5b89\u5168\u306a\u5024\u306e\u53d6\u308a\u6271\u3044<\/h3>\n\n\n\n<p>C++17\u3067\u5c0e\u5165\u3055\u308c\u305f<code>std::optional<\/code>\u306f\u3001\u3053\u308c\u3089\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u512a\u308c\u305f\u4ee3\u66ff\u624b\u6bb5\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;optional&gt;\n#include &lt;string&gt;\n\n\/\/ std::optional\u3092\u4f7f\u7528\u3057\u305f\u5b89\u5168\u306a\u5b9f\u88c5\nstd::optional&lt;std::string&gt; getUserName(int userId) {\n    if (userId &lt;= 0) {\n        return std::nullopt;  \/\/ \u5024\u304c\u5b58\u5728\u3057\u306a\u3044\u72b6\u614b\u3092\u660e\u793a\u7684\u306b\u8868\u73fe\n    }\n    return std::string(\"John Doe\");  \/\/ \u5024\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\n}\n\nvoid processUserName() {\n    auto name = getUserName(-1);\n    if (name) {  \/\/ \u5024\u306e\u5b58\u5728\u78ba\u8a8d\u304c\u5f37\u5236\u3055\u308c\u308b\n        std::cout &lt;&lt; name-&gt;length();  \/\/ \u5b89\u5168\u306a\u53c2\u7167\n    }\n    \/\/ \u660e\u793a\u7684\u306a\u30e1\u30e2\u30ea\u7ba1\u7406\u304c\u4e0d\u8981\n}<\/pre>\n\n\n\n<p><code>std::optional<\/code>\u306e\u4e3b\u306a\u5229\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u578b\u5b89\u5168\u6027\u306e\u4fdd\u8a3c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e\u578b\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>\u6697\u9ed9\u7684\u306a\u578b\u5909\u63db\u306e\u9632\u6b62<\/li>\n\n\n\n<li>\u5024\u306e\u5b58\u5728\u78ba\u8a8d\u304c\u5f37\u5236\u3055\u308c\u308b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u660e\u793a\u7684\u306a\u610f\u56f3\u306e\u8868\u73fe<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u95a2\u6570\u306e\u623b\u308a\u5024\u578b\u304b\u3089\u300c\u5024\u304c\u5b58\u5728\u3057\u306a\u3044\u53ef\u80fd\u6027\u300d\u304c\u660e\u78ba<\/li>\n\n\n\n<li>API\u306e\u5951\u7d04\u3068\u3057\u3066\u306e\u5f79\u5272<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u81ea\u5df1\u6587\u66f8\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u5b89\u5168\u6027\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30bf\u30c3\u30af\u4e0a\u306b\u76f4\u63a5\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4fdd\u6301<\/li>\n\n\n\n<li>RAII\u539f\u5247\u306b\u5f93\u3063\u305f\u81ea\u52d5\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u5fc3\u914d\u304c\u4e0d\u8981<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u52d5\u7684\u30e1\u30e2\u30ea\u78ba\u4fdd\u304c\u4e0d\u8981<\/li>\n\n\n\n<li>\u5024\u578b\u306e\u30bb\u30de\u30f3\u30c6\u30a3\u30af\u30b9<\/li>\n\n\n\n<li>\u6700\u9069\u5316\u306e\u4f59\u5730\u304c\u5927\u304d\u3044\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p><code>std::optional<\/code>\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u72b6\u6cc1\u3067\u7279\u306b\u6709\u52b9\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u691c\u7d22\u64cd\u4f5c\u306e\u7d50\u679c\u304c\u5b58\u5728\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308b\u5834\u5408<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u5024\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\u3067\u3042\u308b\u5834\u5408<\/li>\n\n\n\n<li>\u521d\u671f\u5316\u304c\u9045\u5ef6\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u5834\u5408<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u72b6\u614b\u3092nullable\u306a\u5024\u3068\u3057\u3066\u8868\u73fe\u3057\u305f\u3044\u5834\u5408<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u3088\u308a\u5b89\u5168\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044C++\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7d9a\u304f\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001<code>std::optional<\/code>\u306e\u5177\u4f53\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u3068\u5b9f\u8df5\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">std::optional\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">std::optional\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u3068\u521d\u671f\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p><code>std::optional<\/code>\u306e\u521d\u671f\u5316\u306b\u306f\u8907\u6570\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u3067\u4ee3\u8868\u7684\u306a\u521d\u671f\u5316\u30d1\u30bf\u30fc\u30f3\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;optional&gt;\n#include &lt;string&gt;\n\nvoid demonstrateInitialization() {\n    \/\/ \u7a7a\u306eoptional\u3092\u4f5c\u6210\n    std::optional&lt;int&gt; empty;  \/\/ \u5024\u3092\u6301\u305f\u306a\u3044optional\n\n    \/\/ \u5024\u3092\u6301\u3064optional\u3092\u4f5c\u6210\n    std::optional&lt;int&gt; withValue = 42;  \/\/ \u76f4\u63a5\u5024\u3067\u521d\u671f\u5316\n    std::optional&lt;std::string&gt; withString{\"Hello\"};  \/\/ \u6587\u5b57\u5217\u3067\u521d\u671f\u5316\n\n    \/\/ make_optional\u3092\u4f7f\u7528\u3057\u305f\u521d\u671f\u5316\n    auto constructed = std::make_optional&lt;std::string&gt;(\"World\");\n\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u5f15\u6570\u3092\u6e21\u3057\u3066\u521d\u671f\u5316\n    auto inPlace = std::optional&lt;std::string&gt;(std::in_place, 5, 'x');  \/\/ \"xxxxx\"\n\n    \/\/ nullopt\u3092\u4f7f\u7528\u3057\u305f\u660e\u793a\u7684\u306a\u7a7a\u306e\u521d\u671f\u5316\n    std::optional&lt;double&gt; explicit_empty = std::nullopt;\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u5024\u306e\u5b58\u5728\u78ba\u8a8d\u3068\u5b89\u5168\u306a\u53d6\u308a\u51fa\u3057\u65b9\u6cd5<\/h3>\n\n\n\n<p><code>std::optional<\/code>\u306f\u5024\u306e\u5b58\u5728\u78ba\u8a8d\u3068\u5b89\u5168\u306a\u53d6\u308a\u51fa\u3057\u306e\u305f\u3081\u306e\u69d8\u3005\u306a\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void demonstrateValueAccess(const std::optional&lt;std::string&gt;&amp; opt) {\n    \/\/ \u5024\u306e\u5b58\u5728\u78ba\u8a8d\n    if (opt.has_value()) {  \/\/ \u307e\u305f\u306f if (opt)\n        std::cout &lt;&lt; \"\u5024\u304c\u5b58\u5728\u3057\u307e\u3059: \" &lt;&lt; opt.value() &lt;&lt; std::endl;\n    }\n\n    \/\/ \u5024\u306e\u5b89\u5168\u306a\u53d6\u308a\u51fa\u3057\n    try {\n        std::string val = opt.value();  \/\/ \u5024\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f\u4f8b\u5916\u3092\u30b9\u30ed\u30fc\n    } catch (const std::bad_optional_access&amp; e) {\n        std::cout &lt;&lt; \"\u5024\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\" &lt;&lt; std::endl;\n    }\n\n    \/\/ \u30a2\u30ed\u30fc\u6f14\u7b97\u5b50\u3092\u4f7f\u7528\u3057\u305f\u30e1\u30f3\u30d0\u30fc\u30a2\u30af\u30bb\u30b9\n    if (opt) {\n        std::cout &lt;&lt; \"\u6587\u5b57\u5217\u306e\u9577\u3055: \" &lt;&lt; opt-&gt;length() &lt;&lt; std::endl;\n    }\n\n    \/\/ value_or()\u3092\u4f7f\u7528\u3057\u305f\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306e\u6307\u5b9a\n    std::string result = opt.value_or(\"\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\");\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u4f7f\u7528\u3057\u305f\u67d4\u8edf\u306a\u5024\u306e\u53d6\u308a\u6271\u3044<\/h3>\n\n\n\n<p><code>std::optional<\/code>\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u5b9f\u8df5\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u3092\u3044\u304f\u3064\u304b\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Configuration {\n    std::optional&lt;int&gt; port;\n    std::optional&lt;std::string&gt; host;\n\npublic:\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u4f7f\u7528\u3057\u305f\u8a2d\u5b9a\u5024\u306e\u53d6\u5f97\n    int getPort() const {\n        return port.value_or(8080);  \/\/ \u30dd\u30fc\u30c8\u304c\u672a\u8a2d\u5b9a\u306e\u5834\u5408\u306f8080\u3092\u4f7f\u7528\n    }\n\n    \/\/ \u6761\u4ef6\u4ed8\u304d\u306e\u5024\u8a2d\u5b9a\n    void setPort(int newPort) {\n        port = (newPort &gt; 0 &amp;&amp; newPort &lt; 65536) ? \n            std::optional&lt;int&gt;(newPort) : std::nullopt;\n    }\n\n    \/\/ \u5024\u306e\u5b58\u5728\u306b\u5fdc\u3058\u305f\u51e6\u7406\u5206\u5c90\n    void connectToHost() {\n        if (host &amp;&amp; port) {\n            std::cout &lt;&lt; \"\u63a5\u7d9a: \" &lt;&lt; *host &lt;&lt; \":\" &lt;&lt; *port &lt;&lt; std::endl;\n        } else {\n            std::cout &lt;&lt; \"\u63a5\u7d9a\u60c5\u5831\u304c\u4e0d\u5b8c\u5168\u3067\u3059\" &lt;&lt; std::endl;\n        }\n    }\n};<\/pre>\n\n\n\n<p>\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e6\u30fc\u30b6\u30fc\u5165\u529b\u306e\u691c\u8a3c\u3068\u5909\u63db\nstd::optional&lt;int&gt; parseUserInput(const std::string&amp; input) {\n    try {\n        int value = std::stoi(input);\n        return (value &gt;= 0) ? std::optional&lt;int&gt;(value) : std::nullopt;\n    } catch (...) {\n        return std::nullopt;  \/\/ \u5909\u63db\u5931\u6557\u6642\u306f\u7a7a\u306eoptional\u3092\u8fd4\u3059\n    }\n}\n\n\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0\u3067\u306e\u4f7f\u7528\u4f8b\nclass Cache {\n    std::unordered_map&lt;std::string, std::optional&lt;std::string&gt;&gt; cache;\n\npublic:\n    std::optional&lt;std::string&gt; get(const std::string&amp; key) {\n        auto it = cache.find(key);\n        if (it != cache.end()) {\n            return it-&gt;second;  \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u5024\uff08nullopt\u306e\u53ef\u80fd\u6027\u3042\u308a\uff09\n        }\n        return std::nullopt;  \/\/ \u30ad\u30fc\u304c\u5b58\u5728\u3057\u306a\u3044\n    }\n\n    void set(const std::string&amp; key, const std::optional&lt;std::string&gt;&amp; value) {\n        cache[key] = value;\n    }\n};<\/pre>\n\n\n\n<p>\u4f7f\u7528\u6642\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u521d\u671f\u5316\u306e\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7528\u9014\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u521d\u671f\u5316\u65b9\u6cd5\u3092\u9078\u629e<\/li>\n\n\n\n<li><code>std::nullopt<\/code>\u3092\u4f7f\u7528\u3057\u3066\u660e\u793a\u7684\u306b\u7a7a\u306e\u72b6\u614b\u3092\u8868\u73fe<\/li>\n\n\n\n<li><code>std::in_place<\/code>\u3092\u4f7f\u7528\u3057\u3066\u52b9\u7387\u7684\u306a\u69cb\u7bc9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5024\u306e\u30a2\u30af\u30bb\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>has_value()<\/code>\u307e\u305f\u306f\u6697\u9ed9\u7684\u306a\u5909\u63db\u3067\u5b58\u5728\u78ba\u8a8d<\/li>\n\n\n\n<li><code>value()<\/code>\u307e\u305f\u306f<code>operator*<\/code>\u3067\u5024\u306b\u30a2\u30af\u30bb\u30b9<\/li>\n\n\n\n<li><code>value_or()<\/code>\u3067\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u6307\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f8b\u5916\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>value()<\/code>\u4f7f\u7528\u6642\u306e\u4f8b\u5916\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u8003\u616e<\/li>\n\n\n\n<li>\u5fc5\u8981\u306b\u5fdc\u3058\u3066<code>value_or()<\/code>\u3092\u4f7f\u7528\u3057\u3066\u4f8b\u5916\u3092\u56de\u907f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8003\u616e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e0d\u5fc5\u8981\u306a\u30b3\u30d4\u30fc\u3092\u907f\u3051\u308b\u305f\u3081\u306e\u53c2\u7167\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u5834\u9762\u3067\u306e<code>emplace()<\/code>\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001<code>std::optional<\/code>\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u6d3b\u7528\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">\u5b9f\u8df5\u7684\u306astd::optional\u306e\u6d3b\u7528\u30d1\u30bf\u30fc\u30f3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u95a2\u6570\u306e\u623b\u308a\u5024\u3068\u3057\u3066\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u95a2\u6570\u306e\u623b\u308a\u5024\u3068\u3057\u3066<code>std::optional<\/code>\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u3088\u308a\u8868\u73fe\u529b\u8c4a\u304b\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;optional&gt;\n#include &lt;string&gt;\n#include &lt;vector&gt;\n#include &lt;algorithm&gt;\n\n\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u691c\u7d22\u3092\u6a21\u3057\u305f\u30af\u30e9\u30b9\nclass UserDatabase {\n    std::vector&lt;std::pair&lt;int, std::string&gt;&gt; users;\n\npublic:\n    UserDatabase() {\n        users = {{1, \"Alice\"}, {2, \"Bob\"}, {3, \"Charlie\"}};\n    }\n\n    \/\/ \u691c\u7d22\u7d50\u679c\u304c\u5b58\u5728\u3057\u306a\u3044\u53ef\u80fd\u6027\u3092\u660e\u793a\u7684\u306b\u8868\u73fe\n    std::optional&lt;std::string&gt; findUserById(int id) {\n        auto it = std::find_if(users.begin(), users.end(),\n            [id](const auto&amp; pair) { return pair.first == id; });\n\n        if (it != users.end()) {\n            return it-&gt;second;\n        }\n        return std::nullopt;\n    }\n\n    \/\/ \u8907\u6570\u306e\u6761\u4ef6\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u691c\u7d22\n    std::optional&lt;int&gt; findIdByName(const std::string&amp; name) {\n        auto it = std::find_if(users.begin(), users.end(),\n            [&amp;name](const auto&amp; pair) { return pair.second == name; });\n\n        return it != users.end() ? \n            std::optional&lt;int&gt;(it-&gt;first) : std::nullopt;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u6761\u4ef6\u4ed8\u304d\u5024\u306e\u53d6\u308a\u6271\u3044\u306b\u304a\u3051\u308b\u6d3b\u7528\u4f8b<\/h3>\n\n\n\n<p>\u8907\u96d1\u306a\u6761\u4ef6\u5206\u5c90\u3084\u5024\u306e\u5909\u63db\u3092\u4f34\u3046\u51e6\u7406\u3067\u306e\u6d3b\u7528\u4f8b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ConfigParser {\npublic:\n    \/\/ \u8a2d\u5b9a\u5024\u306e\u578b\u5b89\u5168\u306a\u5909\u63db\n    template&lt;typename T&gt;\n    static std::optional&lt;T&gt; parseValue(const std::string&amp; str) {\n        try {\n            if constexpr (std::is_same_v&lt;T, int&gt;) {\n                return std::stoi(str);\n            } else if constexpr (std::is_same_v&lt;T, double&gt;) {\n                return std::stod(str);\n            } else if constexpr (std::is_same_v&lt;T, bool&gt;) {\n                return str == \"true\" || str == \"1\";\n            }\n        } catch (...) {\n            return std::nullopt;\n        }\n        return std::nullopt;\n    }\n\n    \/\/ \u6761\u4ef6\u4ed8\u304d\u306e\u5024\u691c\u8a3c\u3068\u5909\u63db\n    static std::optional&lt;int&gt; validatePort(const std::string&amp; str) {\n        auto port = parseValue&lt;int&gt;(str);\n        if (port &amp;&amp; *port &gt; 0 &amp;&amp; *port &lt; 65536) {\n            return port;\n        }\n        return std::nullopt;\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid demonstrateConfigParsing() {\n    auto port = ConfigParser::validatePort(\"8080\");\n    if (port) {\n        std::cout &lt;&lt; \"\u6709\u52b9\u306a\u30dd\u30fc\u30c8: \" &lt;&lt; *port &lt;&lt; std::endl;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30c1\u30a7\u30fc\u30f3\u64cd\u4f5c\u306b\u3088\u308b\u512a\u96c5\u306a\u30b3\u30fc\u30c9\u306e\u5b9f\u73fe<\/h3>\n\n\n\n<p><code>std::optional<\/code>\u3092\u4f7f\u7528\u3057\u305f\u30c1\u30a7\u30fc\u30f3\u64cd\u4f5c\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u8aad\u307f\u3084\u3059\u304f\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">template&lt;typename T&gt;\nclass Optional {\n    std::optional&lt;T&gt; value;\n\npublic:\n    Optional(const std::optional&lt;T&gt;&amp; v) : value(v) {}\n\n    \/\/ \u5024\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306e\u307f\u5909\u63db\u3092\u9069\u7528\n    template&lt;typename Func&gt;\n    auto map(Func f) const {\n        using ResultType = decltype(f(std::declval&lt;T&gt;()));\n        if (value) {\n            return Optional&lt;ResultType&gt;(f(*value));\n        }\n        return Optional&lt;ResultType&gt;(std::nullopt);\n    }\n\n    \/\/ \u6761\u4ef6\u306b\u57fa\u3065\u304f\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\n    Optional&lt;T&gt; filter(std::function&lt;bool(const T&amp;)&gt; pred) const {\n        if (value &amp;&amp; pred(*value)) {\n            return *this;\n        }\n        return std::nullopt;\n    }\n\n    \/\/ \u5024\u306e\u53d6\u5f97\n    const std::optional&lt;T&gt;&amp; get() const { return value; }\n};\n\n\/\/ \u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u4f8b\nclass UserService {\n    UserDatabase db;\n\npublic:\n    struct UserInfo {\n        std::string name;\n        int age;\n    };\n\n    Optional&lt;UserInfo&gt; getUserInfo(int id) {\n        return Optional(db.findUserById(id))\n            .map([](const std::string&amp; name) {\n                return UserInfo{name, 30};  \/\/ \u5e74\u9f62\u306f\u7c21\u7565\u5316\u306e\u305f\u3081\u56fa\u5b9a\n            })\n            .filter([](const UserInfo&amp; info) {\n                return info.age &gt;= 18;  \/\/ \u6210\u4eba\u30e6\u30fc\u30b6\u30fc\u306e\u307f\n            });\n    }\n};<\/pre>\n\n\n\n<p>\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u30d1\u30bf\u30fc\u30f3\u306e\u307e\u3068\u3081\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u623b\u308a\u5024\u3068\u3057\u3066\u306e\u4f7f\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u72b6\u614b\u306e\u660e\u793a\u7684\u306a\u8868\u73fe<\/li>\n\n\n\n<li>\u578b\u5b89\u5168\u306a\u7d50\u679c\u306e\u8fd4\u5374<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u5951\u7d04\u306e\u660e\u78ba\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6761\u4ef6\u4ed8\u304d\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u578b\u5909\u63db\u306e\u5b89\u5168\u306a\u5b9f\u88c5<\/li>\n\n\n\n<li>\u5165\u529b\u5024\u306e\u691c\u8a3c<\/li>\n\n\n\n<li>\u8907\u96d1\u306a\u6761\u4ef6\u5206\u5c90\u306e\u7c21\u7565\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c1\u30a7\u30fc\u30f3\u64cd\u4f5c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u95a2\u6570\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b9\u30bf\u30a4\u30eb\u306e\u5b9f\u73fe<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u5411\u4e0a<\/li>\n\n\n\n<li>\u51e6\u7406\u306e\u7d44\u307f\u5408\u308f\u305b\u5bb9\u6613\u6027<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u8868\u73fe\u529b\u8c4a\u304b\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u88c5\u3059\u308b\u969b\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30e1\u30e2\u30ea\u7ba1\u7406\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">std::optional\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30e1\u30e2\u30ea\u7ba1\u7406<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u5185\u90e8\u5b9f\u88c5\u3068\u6700\u9069\u5316\u306e\u30e1\u30ab\u30cb\u30ba\u30e0<\/h3>\n\n\n\n<p><code>std::optional<\/code>\u306e\u5185\u90e8\u5b9f\u88c5\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u52b9\u7387\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u304c\u898b\u3048\u3066\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ std::optional\u306e\u7c21\u7565\u5316\u3055\u308c\u305f\u5185\u90e8\u5b9f\u88c5\u30a4\u30e1\u30fc\u30b8\ntemplate&lt;typename T&gt;\nclass optional {\nprivate:\n    \/\/ \u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u8981\u4ef6\u3092\u6e80\u305f\u3059\u30b9\u30c8\u30ec\u30fc\u30b8\n    alignas(T) unsigned char storage[sizeof(T)];\n    bool has_value_;  \/\/ \u5024\u306e\u5b58\u5728\u30d5\u30e9\u30b0\n\n    \/\/ \u5b9f\u969b\u306e\u5b9f\u88c5\u3067\u306f\u3082\u3063\u3068\u8907\u96d1\u306a\u6700\u9069\u5316\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059\n};<\/pre>\n\n\n\n<p>\u4e3b\u306a\u5b9f\u88c5\u7279\u6027\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30ec\u30a4\u30a2\u30a6\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5024\u578b\u306e\u30a4\u30f3\u30e9\u30a4\u30f3\u4fdd\u6301<\/li>\n\n\n\n<li>\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u8981\u4ef6\u306e\u81ea\u52d5\u51e6\u7406<\/li>\n\n\n\n<li>\u8ffd\u52a0\u306e\u30e1\u30e2\u30ea\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u306f\u6700\u5c0f\u9650<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6700\u9069\u5316\u6a5f\u4f1a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30e9\u306b\u3088\u308b\u7a4d\u6975\u7684\u306a\u30a4\u30f3\u30e9\u30a4\u30f3\u5316<\/li>\n\n\n\n<li>\u7a7a\u306e\u6700\u9069\u5316\uff08Empty Base Optimization\uff09\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30e0\u30fc\u30d6\u30bb\u30de\u30f3\u30c6\u30a3\u30af\u30b9\u306e\u52b9\u7387\u7684\u306a\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;chrono&gt;\n#include &lt;optional&gt;\n#include &lt;memory&gt;\n\n\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\u7528\u306e\u95a2\u6570\nvoid comparePerformance() {\n    const int iterations = 1000000;\n\n    \/\/ std::optional\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\n    auto start = std::chrono::high_resolution_clock::now();\n    std::optional&lt;std::string&gt; opt;\n    for (int i = 0; i &lt; iterations; ++i) {\n        opt = std::string(\"test\");\n        if (opt) {\n            opt = std::nullopt;\n        }\n    }\n    auto end = std::chrono::high_resolution_clock::now();\n    auto optional_duration = std::chrono::duration_cast&lt;std::chrono::microseconds&gt;\n        (end - start).count();\n\n    \/\/ \u751f\u30dd\u30a4\u30f3\u30bf\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\n    start = std::chrono::high_resolution_clock::now();\n    std::string* ptr = nullptr;\n    for (int i = 0; i &lt; iterations; ++i) {\n        ptr = new std::string(\"test\");\n        if (ptr) {\n            delete ptr;\n            ptr = nullptr;\n        }\n    }\n    end = std::chrono::high_resolution_clock::now();\n    auto pointer_duration = std::chrono::duration_cast&lt;std::chrono::microseconds&gt;\n        (end - start).count();\n\n    std::cout &lt;&lt; \"std::optional: \" &lt;&lt; optional_duration &lt;&lt; \"\u00b5s\\n\";\n    std::cout &lt;&lt; \"raw pointer: \" &lt;&lt; pointer_duration &lt;&lt; \"\u00b5s\\n\";\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u30e1\u30e2\u30ea\u4f7f\u7528\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class MemoryEfficientExample {\nprivate:\n    \/\/ \u5927\u304d\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3059\u308b\u6700\u9069\u5316\n    struct LargeObject {\n        std::array&lt;char, 1024&gt; data;\n        std::string metadata;\n    };\n\n    \/\/ \u5fc5\u8981\u306b\u306a\u3063\u305f\u6642\u70b9\u3067\u521d\u671f\u5316\n    std::optional&lt;LargeObject&gt; large_object;\n\npublic:\n    \/\/ \u9045\u5ef6\u521d\u671f\u5316\u306e\u5b9f\u88c5\n    void initializeLazy() {\n        if (!large_object) {\n            large_object.emplace();  \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u5f15\u6570\u3092\u76f4\u63a5\u8ee2\u9001\n        }\n    }\n\n    \/\/ \u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n    void cleanup() {\n        large_object = std::nullopt;  \/\/ \u660e\u793a\u7684\u306a\u89e3\u653e\n    }\n};\n\n\/\/ \u30e1\u30e2\u30ea\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\ntemplate&lt;typename T&gt;\nclass OptimizedContainer {\nprivate:\n    std::vector&lt;std::optional&lt;T&gt;&gt; items;\n\npublic:\n    \/\/ \u8981\u7d20\u306e\u52b9\u7387\u7684\u306a\u8ffd\u52a0\n    void addItem(T item) {\n        \/\/ \u672a\u4f7f\u7528\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u63a2\u3059\n        auto it = std::find_if(items.begin(), items.end(),\n            [](const auto&amp; opt) { return !opt.has_value(); });\n\n        if (it != items.end()) {\n            *it = std::move(item);  \/\/ \u65e2\u5b58\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u518d\u5229\u7528\n        } else {\n            items.emplace_back(std::move(item));  \/\/ \u65b0\u3057\u3044\u30b9\u30ed\u30c3\u30c8\u3092\u8ffd\u52a0\n        }\n    }\n\n    \/\/ \u8981\u7d20\u306e\u52b9\u7387\u7684\u306a\u524a\u9664\n    void removeItem(size_t index) {\n        if (index &lt; items.size()) {\n            items[index] = std::nullopt;  \/\/ \u30e1\u30e2\u30ea\u3092\u4fdd\u6301\u3057\u305f\u307e\u307e\u8981\u7d20\u3092\u7121\u52b9\u5316\n        }\n    }\n};<\/pre>\n\n\n\n<p>\u6700\u9069\u5316\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u60aa\u3044\u4f8b\uff1a\u4e0d\u5fc5\u8981\u306a\u30e1\u30e2\u30ea\u4f7f\u7528\n   struct BadLayout {\n       std::optional&lt;char&gt; small_value;      \/\/ \u30d1\u30c7\u30a3\u30f3\u30b0\u304c\u767a\u751f\n       std::optional&lt;double&gt; large_value;\n   };\n\n   \/\/ \u826f\u3044\u4f8b\uff1a\u30e1\u30f3\u30d0\u5909\u6570\u306e\u9069\u5207\u306a\u914d\u7f6e\n   struct GoodLayout {\n       std::optional&lt;double&gt; large_value;    \/\/ 8\u30d0\u30a4\u30c8\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\n       std::optional&lt;char&gt; small_value;      \/\/ \u30d1\u30c7\u30a3\u30f3\u30b0\u3092\u6700\u5c0f\u5316\n   };<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30d1\u30b7\u30c6\u30a3\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u4e88\u7d04\u306b\u3088\u308b\u518d\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u524a\u6e1b\n   std::vector&lt;std::optional&lt;int&gt;&gt; vec;\n   vec.reserve(expected_size);  \/\/ \u30e1\u30e2\u30ea\u306e\u4e8b\u524d\u78ba\u4fdd\n\n   \/\/ \u30d0\u30c3\u30c1\u51e6\u7406\u306b\u3088\u308b\u52b9\u7387\u5316\n   void batchProcess(std::vector&lt;std::optional&lt;int&gt;&gt;&amp; vec) {\n       vec.clear();  \/\/ \u30ad\u30e3\u30d1\u30b7\u30c6\u30a3\u3092\u4fdd\u6301\u3057\u305f\u307e\u307e\u30af\u30ea\u30a2\n       vec.shrink_to_fit();  \/\/ \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30e1\u30e2\u30ea\u3092\u89e3\u653e\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30e0\u30fc\u30d6\u30bb\u30de\u30f3\u30c6\u30a3\u30af\u30b9\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   std::optional&lt;std::vector&lt;int&gt;&gt; opt;\n\n   \/\/ \u52b9\u7387\u7684\u306a\u4ee3\u5165\n   opt = std::vector&lt;int&gt;(1000);  \/\/ \u4e00\u6642\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u76f4\u63a5\u30e0\u30fc\u30d6\n\n   \/\/ emplace\u69cb\u7bc9\n   opt.emplace(1000);  \/\/ \u5f15\u6570\u3092\u76f4\u63a5\u8ee2\u9001\u3057\u3066\u69cb\u7bc9<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001<code>std::optional<\/code>\u3092\u4f7f\u7528\u3057\u305f\u30b3\u30fc\u30c9\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30e1\u30e2\u30ea\u52b9\u7387\u3092\u6700\u5927\u9650\u306b\u9ad8\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u77e5\u8b58\u3092\u6d3b\u304b\u3057\u305f\u5b9f\u88c5\u4f8b\u3068\u6ce8\u610f\u70b9\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-14\">std::optional\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u88c5\u4f8b\u3068\u6ce8\u610f\u70b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3067\u306e\u6d3b\u7528\u4e8b\u4f8b<\/h3>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306b\u304a\u3044\u3066\u3001<code>std::optional<\/code>\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u5b9f\u88c5\u4f8b\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;optional&gt;\n#include &lt;string&gt;\n#include &lt;unordered_map&gt;\n\n\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u6a21\u3057\u305f\u30af\u30e9\u30b9\nclass Database {\nprivate:\n    struct Record {\n        int id;\n        std::string name;\n        std::optional&lt;std::string&gt; email;  \/\/ \u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\n        std::optional&lt;std::string&gt; phone;  \/\/ \u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\n    };\n\n    std::unordered_map&lt;int, Record&gt; records;\n\npublic:\n    \/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u8ffd\u52a0\uff08\u90e8\u5206\u7684\u306a\u60c5\u5831\u306e\u307f\u306e\u5834\u5408\u3082\u5bfe\u5fdc\uff09\n    void addRecord(int id, const std::string&amp; name,\n                  std::optional&lt;std::string&gt; email = std::nullopt,\n                  std::optional&lt;std::string&gt; phone = std::nullopt) {\n        records[id] = Record{id, name, email, phone};\n    }\n\n    \/\/ \u7279\u5b9a\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u66f4\u65b0\uff08\u5909\u66f4\u304c\u306a\u3044\u5834\u5408\u306fnullopt\uff09\n    bool updateRecord(int id,\n                     const std::optional&lt;std::string&gt;&amp; name = std::nullopt,\n                     const std::optional&lt;std::string&gt;&amp; email = std::nullopt,\n                     const std::optional&lt;std::string&gt;&amp; phone = std::nullopt) {\n        auto it = records.find(id);\n        if (it == records.end()) return false;\n\n        if (name) it-&gt;second.name = *name;\n        if (email) it-&gt;second.email = *email;\n        if (phone) it-&gt;second.phone = *phone;\n        return true;\n    }\n\n    \/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u53d6\u5f97\uff08\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306fnullopt\uff09\n    std::optional&lt;Record&gt; getRecord(int id) const {\n        auto it = records.find(id);\n        return it != records.end() ? \n            std::optional&lt;Record&gt;(it-&gt;second) : std::nullopt;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u8a2d\u5b9a\u5024\u306e\u7ba1\u7406\u306b\u304a\u3051\u308b\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<p>\u8a2d\u5b9a\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3067\u306e<code>std::optional<\/code>\u306e\u6d3b\u7528\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Configuration {\nprivate:\n    struct Settings {\n        std::optional&lt;int&gt; port;\n        std::optional&lt;std::string&gt; host;\n        std::optional&lt;bool&gt; useSSL;\n        std::optional&lt;std::string&gt; certificatePath;\n    };\n\n    Settings settings;\n\npublic:\n    \/\/ \u30d3\u30eb\u30c0\u30fc\u30d1\u30bf\u30fc\u30f3\u3092\u6d3b\u7528\u3057\u305f\u8a2d\u5b9a\n    class Builder {\n        Settings settings;\n    public:\n        Builder&amp; setPort(int p) {\n            settings.port = p;\n            return *this;\n        }\n\n        Builder&amp; setHost(const std::string&amp; h) {\n            settings.host = h;\n            return *this;\n        }\n\n        Builder&amp; setSSL(bool ssl) {\n            settings.useSSL = ssl;\n            return *this;\n        }\n\n        Builder&amp; setCertificatePath(const std::string&amp; path) {\n            settings.certificatePath = path;\n            return *this;\n        }\n\n        Configuration build() {\n            \/\/ SSL\u4f7f\u7528\u6642\u306f\u8a3c\u660e\u66f8\u30d1\u30b9\u304c\u5fc5\u9808\n            if (settings.useSSL &amp;&amp; settings.useSSL.value() &amp;&amp; \n                !settings.certificatePath) {\n                throw std::runtime_error(\"SSL requires certificate path\");\n            }\n            return Configuration(settings);\n        }\n    };\n\n    static Builder builder() { return Builder(); }\n\n    \/\/ \u8a2d\u5b9a\u5024\u306e\u53d6\u5f97\u3068\u691c\u8a3c\n    std::optional&lt;int&gt; getPort() const { return settings.port; }\n\n    bool isValid() const {\n        return settings.host &amp;&amp; settings.port &amp;&amp;\n               (!settings.useSSL.value_or(false) || settings.certificatePath);\n    }\n\nprivate:\n    Configuration(const Settings&amp; s) : settings(s) {}\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u5171\u901a\u306e\u843d\u3068\u3057\u7a74\u3068\u5bfe\u51e6\u65b9\u6cd5<\/h3>\n\n\n\n<p><code>std::optional<\/code>\u4f7f\u7528\u6642\u306e\u4e00\u822c\u7684\u306a\u554f\u984c\u3068\u305d\u306e\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class OptionalPitfalls {\npublic:\n    \/\/ \u554f\u984c1: \u4e0d\u5fc5\u8981\u306a\u30c1\u30a7\u30c3\u30af\u306e\u91cd\u8907\n    void badExample1(const std::optional&lt;std::string&gt;&amp; opt) {\n        \/\/ \u60aa\u3044\u4f8b\uff1a\u4e8c\u91cd\u30c1\u30a7\u30c3\u30af\n        if (opt.has_value()) {\n            if (opt.value().empty()) {  \/\/ \u65e2\u306b\u30c1\u30a7\u30c3\u30af\u6e08\u307f\n                \/\/ \u51e6\u7406\n            }\n        }\n\n        \/\/ \u826f\u3044\u4f8b\uff1a\u4e00\u5ea6\u306e\u30c1\u30a7\u30c3\u30af\u3067\u51e6\u7406\n        if (opt &amp;&amp; !opt-&gt;empty()) {\n            \/\/ \u51e6\u7406\n        }\n    }\n\n    \/\/ \u554f\u984c2: \u4f8b\u5916\u5b89\u5168\u6027\u306e\u8003\u616e\u4e0d\u8db3\n    std::string badExample2(const std::optional&lt;std::string&gt;&amp; opt) {\n        \/\/ \u60aa\u3044\u4f8b\uff1a\u4f8b\u5916\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\n        return opt.value();  \/\/ \u5024\u304c\u306a\u3044\u5834\u5408\u306b\u4f8b\u5916\n\n        \/\/ \u826f\u3044\u4f8b\uff1a\u5b89\u5168\u306a\u30a2\u30af\u30bb\u30b9\n        return opt.value_or(\"default\");\n    }\n\n    \/\/ \u554f\u984c3: \u4e0d\u9069\u5207\u306a\u6bd4\u8f03\n    bool badExample3(const std::optional&lt;int&gt;&amp; a,\n                    const std::optional&lt;int&gt;&amp; b) {\n        \/\/ \u60aa\u3044\u4f8b\uff1anullopt\u306e\u8003\u616e\u304c\u4e0d\u8db3\n        return a.value_or(0) &lt; b.value_or(0);\n\n        \/\/ \u826f\u3044\u4f8b\uff1a\u5b8c\u5168\u306a\u6bd4\u8f03\n        if (!a &amp;&amp; !b) return false;  \/\/ \u4e21\u65b9\u7a7a\n        if (!a) return true;         \/\/ a\u304c\u7a7a\n        if (!b) return false;        \/\/ b\u304c\u7a7a\n        return *a &lt; *b;              \/\/ \u5024\u306e\u6bd4\u8f03\n    }\n\n    \/\/ \u554f\u984c4: \u30e0\u30fc\u30d6\u30bb\u30de\u30f3\u30c6\u30a3\u30af\u30b9\u306e\u8aa4\u7528\n    void badExample4() {\n        std::optional&lt;std::vector&lt;int&gt;&gt; opt;\n\n        \/\/ \u60aa\u3044\u4f8b\uff1a\u4e0d\u5fc5\u8981\u306a\u30b3\u30d4\u30fc\n        opt = std::vector&lt;int&gt;(100);\n\n        \/\/ \u826f\u3044\u4f8b\uff1a\u76f4\u63a5\u69cb\u7bc9\n        opt.emplace(100);\n    }\n};\n\n\/\/ \u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u4f8b\nclass OptionalBestPractices {\npublic:\n    \/\/ \u30d1\u30bf\u30fc\u30f31: \u65e9\u671f\u30ea\u30bf\u30fc\u30f3\n    void processData(const std::optional&lt;std::string&gt;&amp; data) {\n        if (!data) return;  \/\/ \u65e9\u671f\u30ea\u30bf\u30fc\u30f3\n\n        \/\/ \u30c7\u30fc\u30bf\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306e\u51e6\u7406\n        processValidData(*data);\n    }\n\n    \/\/ \u30d1\u30bf\u30fc\u30f32: \u578b\u5909\u63db\u306e\u5b89\u5168\u306a\u51e6\u7406\n    template&lt;typename T, typename U&gt;\n    std::optional&lt;T&gt; safeCast(const std::optional&lt;U&gt;&amp; source) {\n        if (!source) return std::nullopt;\n        if constexpr (std::is_convertible_v&lt;U, T&gt;) {\n            return static_cast&lt;T&gt;(*source);\n        }\n        return std::nullopt;\n    }\n\n    \/\/ \u30d1\u30bf\u30fc\u30f33: \u6761\u4ef6\u4ed8\u304d\u66f4\u65b0\n    template&lt;typename T&gt;\n    void updateIfValid(std::optional&lt;T&gt;&amp; target,\n                      const std::optional&lt;T&gt;&amp; source) {\n        if (source &amp;&amp; isValid(*source)) {\n            target = source;\n        }\n    }\n\nprivate:\n    template&lt;typename T&gt;\n    bool isValid(const T&amp; value) {\n        \/\/ \u5024\u306e\u691c\u8a3c\u30ed\u30b8\u30c3\u30af\n        return true;  \/\/ \u5b9f\u969b\u306e\u691c\u8a3c\u30ed\u30b8\u30c3\u30af\u3092\u5b9f\u88c5\n    }\n\n    void processValidData(const std::string&amp; data) {\n        \/\/ \u5b9f\u969b\u306e\u51e6\u7406\u30ed\u30b8\u30c3\u30af\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u3068\u6ce8\u610f\u70b9\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001<code>std::optional<\/code>\u3092\u3088\u308a\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4ed6\u306e\u30a8\u30e9\u30fc\u51e6\u7406\u624b\u6cd5\u3068\u306e\u4f7f\u3044\u5206\u3051\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">std::optional\u3068\u4ed6\u306e\u30a8\u30e9\u30fc\u51e6\u7406\u624b\u6cd5\u306e\u4f7f\u3044\u5206\u3051<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u4f8b\u5916\u51e6\u7406\u3068\u306e\u9069\u5207\u306a\u7d44\u307f\u5408\u308f\u305b\u65b9<\/h3>\n\n\n\n<p><code>std::optional<\/code>\u3068\u4f8b\u5916\u51e6\u7406\u3092\u52b9\u679c\u7684\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;optional&gt;\n#include &lt;stdexcept&gt;\n#include &lt;string&gt;\n#include &lt;vector&gt;\n\nclass ErrorHandlingExample {\npublic:\n    \/\/ \u4f8b\u5916\u3068optional\u306e\u7d44\u307f\u5408\u308f\u305b\n    class DatabaseError : public std::runtime_error {\n        using std::runtime_error::runtime_error;\n    };\n\n    struct UserData {\n        std::string name;\n        int age;\n    };\n\n    \/\/ \u56de\u5fa9\u53ef\u80fd\u306a\u72b6\u6cc1\u306b\u306foptional\u3092\u4f7f\u7528\n    std::optional&lt;UserData&gt; findUser(const std::string&amp; username) {\n        try {\n            if (!isConnected()) {\n                throw DatabaseError(\"Database connection lost\");\n            }\n\n            \/\/ \u30e6\u30fc\u30b6\u30fc\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u306fnullopt\n            if (!userExists(username)) {\n                return std::nullopt;\n            }\n\n            \/\/ \u30e6\u30fc\u30b6\u30fc\u30c7\u30fc\u30bf\u306e\u53d6\u5f97\n            return UserData{username, 25};  \/\/ \u7c21\u7565\u5316\n        } catch (const DatabaseError&amp; e) {\n            \/\/ \u6df1\u523b\u306a\u30a8\u30e9\u30fc\u306f\u4f8b\u5916\u3068\u3057\u3066\u4f1d\u64ad\n            throw;\n        } catch (...) {\n            \/\/ \u305d\u306e\u4ed6\u306e\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u306f\u30ed\u30b0\u8a18\u9332\u5f8c\u306bnullopt\n            logError(\"Unexpected error in findUser\");\n            return std::nullopt;\n        }\n    }\n\n    \/\/ \u30a8\u30e9\u30fc\u51e6\u7406\u306e\u968e\u5c64\u5316\n    class UserManager {\n    public:\n        \/\/ \u9ad8\u30ec\u30d9\u30eb\u306e\u64cd\u4f5c\u3067\u306f\u4f8b\u5916\u3092\u4f7f\u7528\n        void createUser(const std::string&amp; username, int age) {\n            if (!validateUsername(username)) {\n                throw std::invalid_argument(\"Invalid username\");\n            }\n\n            auto result = tryCreateUser(username, age);\n            if (!result) {\n                throw DatabaseError(\"Failed to create user\");\n            }\n        }\n\n    private:\n        \/\/ \u5185\u90e8\u5b9f\u88c5\u3067\u306f\u53ef\u80fd\u306a\u9650\u308aoptional\u3092\u4f7f\u7528\n        std::optional&lt;bool&gt; tryCreateUser(const std::string&amp; username, int age) {\n            if (userExists(username)) {\n                return std::nullopt;\n            }\n            \/\/ \u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u30ed\u30b8\u30c3\u30af\uff08\u7c21\u7565\u5316\uff09\n            return true;\n        }\n\n        bool validateUsername(const std::string&amp; username) {\n            return !username.empty() &amp;&amp; username.length() &lt;= 50;\n        }\n\n        bool userExists(const std::string&amp; username) {\n            return false;  \/\/ \u7c21\u7565\u5316\n        }\n    };\n\nprivate:\n    bool isConnected() { return true; }  \/\/ \u7c21\u7565\u5316\n    bool userExists(const std::string&amp; username) { return false; }  \/\/ \u7c21\u7565\u5316\n    void logError(const std::string&amp; message) { \/* \u30ed\u30b0\u8a18\u9332\u51e6\u7406 *\/ }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">std::variant\u3001std::any\u3068\u306e\u4f7f\u3044\u5206\u3051\u30ac\u30a4\u30c9<\/h3>\n\n\n\n<p>\u5404\u578b\u306e\u7279\u5fb4\u3068\u9069\u5207\u306a\u4f7f\u7528\u5834\u9762\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;any&gt;\n#include &lt;variant&gt;\n\nclass TypeSelectionGuide {\npublic:\n    \/\/ std::optional\u306e\u4f7f\u7528\u4f8b\uff1a\u5024\u306e\u6709\u7121\u3092\u8868\u73fe\n    std::optional&lt;int&gt; parseInteger(const std::string&amp; str) {\n        try {\n            return std::stoi(str);\n        } catch (...) {\n            return std::nullopt;\n        }\n    }\n\n    \/\/ std::variant\u306e\u4f7f\u7528\u4f8b\uff1a\u8907\u6570\u306e\u578b\u306e\u53ef\u80fd\u6027\u3092\u8868\u73fe\n    using NumberVariant = std::variant&lt;int, double, std::string&gt;;\n    NumberVariant parseNumber(const std::string&amp; str) {\n        try {\n            return std::stoi(str);\n        } catch (...) {\n            try {\n                return std::stod(str);\n            } catch (...) {\n                return str;  \/\/ \u6570\u5024\u3068\u3057\u3066\u89e3\u91c8\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u6587\u5b57\u5217\u3068\u3057\u3066\u6271\u3046\n            }\n        }\n    }\n\n    \/\/ std::any\u306e\u4f7f\u7528\u4f8b\uff1a\u578b\u304c\u52d5\u7684\u306b\u6c7a\u5b9a\u3055\u308c\u308b\u5834\u5408\n    std::any parseValue(const std::string&amp; str, const std::string&amp; type) {\n        if (type == \"int\") {\n            return std::stoi(str);\n        } else if (type == \"double\") {\n            return std::stod(str);\n        } else if (type == \"bool\") {\n            return str == \"true\";\n        }\n        return str;\n    }\n};\n\n\/\/ \u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u5206\u3051\u306e\u4f8b\nclass DataProcessor {\npublic:\n    \/\/ optional\u3068variant\u306e\u7d44\u307f\u5408\u308f\u305b\n    struct ProcessResult {\n        std::optional&lt;std::variant&lt;int, std::string&gt;&gt; data;\n        std::optional&lt;std::string&gt; error;\n    };\n\n    ProcessResult processData(const std::string&amp; input) {\n        if (input.empty()) {\n            return {std::nullopt, \"Empty input\"};\n        }\n\n        try {\n            return {std::variant&lt;int, std::string&gt;(std::stoi(input)), std::nullopt};\n        } catch (...) {\n            return {std::variant&lt;int, std::string&gt;(input), std::nullopt};\n        }\n    }\n\n    \/\/ \u5404\u578b\u306e\u7279\u6027\u3092\u6d3b\u304b\u3057\u305f\u4f7f\u3044\u5206\u3051\n    class ConfigValue {\n        std::variant&lt;int, double, std::string&gt; value;\n        std::optional&lt;std::string&gt; description;  \/\/ \u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\u306a\u8aac\u660e\n        std::any metadata;  \/\/ \u4efb\u610f\u306e\u8ffd\u52a0\u30c7\u30fc\u30bf\n\n    public:\n        template&lt;typename T&gt;\n        void setValue(T&amp;&amp; val) {\n            value = std::forward&lt;T&gt;(val);\n        }\n\n        void setDescription(const std::string&amp; desc) {\n            description = desc;\n        }\n\n        template&lt;typename T&gt;\n        void setMetadata(T&amp;&amp; data) {\n            metadata = std::forward&lt;T&gt;(data);\n        }\n    };\n};<\/pre>\n\n\n\n<p>\u4f7f\u3044\u5206\u3051\u306e\u57fa\u6e96\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>std::optional\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5024\u304c\u5b58\u5728\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308b\u5834\u5408<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u72b6\u614b\u304c\u300c\u5024\u306e\u4e0d\u5728\u300d\u3067\u8868\u73fe\u3067\u304d\u308b\u5834\u5408<\/li>\n\n\n\n<li>\u5358\u4e00\u306e\u578b\u306b\u5bfe\u3059\u308b\u64cd\u4f5c<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>std::variant\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u306e\u578b\u306e\u53ef\u80fd\u6027\u304c\u4e8b\u524d\u306b\u5206\u304b\u3063\u3066\u3044\u308b\u5834\u5408<\/li>\n\n\n\n<li>\u578b\u5b89\u5168\u306a\u591a\u614b\u6027\u304c\u5fc5\u8981\u306a\u5834\u5408<\/li>\n\n\n\n<li>\u30d1\u30bf\u30fc\u30f3\u30de\u30c3\u30c1\u30f3\u30b0\u7684\u306a\u51e6\u7406\u304c\u5fc5\u8981\u306a\u5834\u5408<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>std::any\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u578b\u304c\u5b8c\u5168\u306b\u52d5\u7684\u306b\u6c7a\u5b9a\u3055\u308c\u308b\u5834\u5408<\/li>\n\n\n\n<li>\u30d7\u30e9\u30b0\u30a4\u30f3\u6a5f\u69cb\u306a\u3069\u3001\u578b\u306e\u5236\u7d04\u3092\u8a2d\u3051\u3089\u308c\u306a\u3044\u5834\u5408<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3088\u308a\u3082\u67d4\u8edf\u6027\u304c\u91cd\u8981\u306a\u5834\u5408<\/li>\n<\/ul>\n\n\n\n<p>\u5b9f\u88c5\u6642\u306e\u6ce8\u610f\u70b9\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ErrorHandlingGuidelines {\npublic:\n    \/\/ optional\u3068variant\u306e\u9069\u5207\u306a\u7d44\u307f\u5408\u308f\u305b\n    template&lt;typename T&gt;\n    class Result {\n        std::variant&lt;T, std::string&gt; value_or_error;\n        bool has_value;\n\n    public:\n        static Result&lt;T&gt; success(T value) {\n            return Result(std::move(value));\n        }\n\n        static Result&lt;T&gt; error(std::string error) {\n            return Result(std::move(error));\n        }\n\n        bool isSuccess() const { return has_value; }\n\n        const T&amp; getValue() const {\n            return std::get&lt;T&gt;(value_or_error);\n        }\n\n        const std::string&amp; getError() const {\n            return std::get&lt;std::string&gt;(value_or_error);\n        }\n\n    private:\n        Result(T value) \n            : value_or_error(std::move(value)), has_value(true) {}\n        Result(std::string error) \n            : value_or_error(std::move(error)), has_value(false) {}\n    };\n\n    \/\/ \u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u4f8b\n    Result&lt;int&gt; processValue(const std::string&amp; input) {\n        auto parsed = parseInteger(input);\n        if (!parsed) {\n            return Result&lt;int&gt;::error(\"Failed to parse integer\");\n        }\n        if (*parsed &lt; 0) {\n            return Result&lt;int&gt;::error(\"Negative values not allowed\");\n        }\n        return Result&lt;int&gt;::success(*parsed);\n    }\n\nprivate:\n    std::optional&lt;int&gt; parseInteger(const std::string&amp; str) {\n        try {\n            return std::stoi(str);\n        } catch (...) {\n            return std::nullopt;\n        }\n    }\n};<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u3088\u3046\u306b\u3001\u5404\u30a8\u30e9\u30fc\u51e6\u7406\u624b\u6cd5\u306b\u306f\u9069\u5207\u306a\u4f7f\u7528\u5834\u9762\u304c\u3042\u308a\u3001\u305d\u308c\u3089\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-1835","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1835"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1835\/revisions"}],"predecessor-version":[{"id":1850,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1835\/revisions\/1850"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}