2017-12-13 24 views
-1

nulloptの代わりにnullptrを使用できないのはなぜですか?なぜ{}nulloptのように翻訳されますか?nullptr、{}とnulloptの違い

+4

'std :: optional ' ;-) – Jarod42

+5

存在しないオプションのポインタは存在し、 'nullptr'のポインタとは異なります。デフォルトで初期化された 'optional'はオブジェクトを持たなくてはなりません。それは私には明らかです。また、 'std :: optional'を受け入れた論文を読むことで、あなたの質問に答えられるかどうか疑問です。 –

+1

'nullptr' ="ポインタがありますが、何も指していません "; 'nullopt':「何もない」 – molbdnilo

答えて

5
  • optional<T>Tへのポインタのようなものではない、それは Tまたは何もないのいずれかの値です。ポインターや参照のように、「ダンブールoptional」やその他の「無効な」値を持つことはできません。

  • nullptrは、任意のポインタ型の値に変換できるオブジェクトです。

  • nulloptは、任意のoptionalタイプの値に変換できるオブジェクトです。

  • {}(値を期待文脈において)Tコンテキストから推測いくつかのタイプである「タイプTの デフォルト構築オブジェクト」を意味する表現です。 Tがポインタ型の場合は、nullptrと比較されます。 Toptionalタイプの場合、nulloptと比較されます。 Tが算術型の場合は、0と比較されます。 Tが標準のコンテナタイプの1つである場合、それはそのタイプの他の空のコンテナと同等になります。

3

はなぜnullptrの代わりnullopt使用することはできませんか?

これは別のものだからです。彼らは何か違うことを意味し、彼らは何か違うものに使われています。

std::optional<int*> o; 
o = nullptr; 
assert(o.has_value()); 
o = std::nullopt; 
assert(!o.has_value()); 

そして、なぜ{}nulloptのように変換します。nullptrはすでに何かをするため

それはstd::optionalで使用するための明確なnullopt値を持っている必要がありますか?

(他のタイプの{}を使用しない場合​​ための唯一の真実であるNB。)

またしても、そのことはo = {}を言うと、それは正しいこと™とそう持つことができるのが便利だからそれを動作させるためにstd::optionalの仕様が書かれています。

関連する問題