2016-11-02 2 views
1

boost::optional C++ライブラリは実験::オプション "nullopt_t" 命名根拠

f(..., optional<T> default_argument = boost::none) 

又は

f(..., optional<T> default_argument = none) 

ようなコードだけでなく、選択した名前であるboost::noneによって示さ 'は値' を有していません意図は読者に明確に伝えられています。また、他の言語の標準クラスで提供されている「価値なし」と同様です。このBoostライブラリはstd::experimental::optionalとして標準に組み込まれましたが、noneという名前は変更不可能なnullopt_tに改名されました。なぜ誰が知っていますか?

+2

おそらく、他の型名の命名規則と一貫性を保つためです。実際の値は 'nullopt'であり、' nullopt_t'型です。 'nullptr'と同じように' nullptr_t'型の値です。 – NathanOliver

+0

'nulloptは'オプションの 'にも固有ですが、' none'は何にも適用できます。 'expected 'が 'optional 'と意味的に等価であると想定されている 'expected 'の標準化では面白い問題です。 –

+0

@NiallDouglasそれは名前空間が何のためのものなのですか? – Mohan

答えて

3

ぼんやりとboost::noneを標準化するよりもboost::optionalを標準化する方が簡単でした。 boost::noneは、boost::optionalを初期化する目的を果たしますが、明確なセマンティクスはありません。

voidによく似た値義的な方法が役に立ちますが、回答には多くの質問が必要です。それはoperator<で、注文型ですか?それはnullptrとのinter-convertibeであるべきであるか。 nullptrと比較できますか?私はこれらの質問がboost::optionalの採用を妨げないよう願っていたので、我々は妥協に同意した。今のところnulloptに行き、optionalのオブジェクトを初期化することだけです。後でよく振る舞うnoneを追加してください。そして、実際には、「先生」の仕事noneが進行中です。 See here

+0

'none'の作業についてはとてもうれしいです。 'nullopt' _really_は読みやすさを傷つけます。 さらに重要なことは、この作業に感謝します。 – Mohan

関連する問題