簡體   English   中英

boost :: optional的比較(<),輸出(<<)和賦值(=)

[英]Comparison (<), output (<<) and assignment (=) for boost::optional

我有一些關於boost::optional如何工作的問題。 我們先來這樣做:

boost::optional<int> i;
  1. i < 3總是等於*i < 3 (和其他關系運算符類似)?
  2. 條件i < 3*i < 3未定義是否正確? i還沒有做任何事情)
  3. 什么是std::cout << i應該打印?
  4. 我很確定i = 3總是與*i = 3相同。 如果是這樣,我應該選擇哪個?
  1. 不。如果i未初始化,第一個將返回true而第二個將斷言。
  2. 否。 operator<的文檔operator<清楚地表明如果左手參數未初始化,則在設置右手操作數時它將返回true
  3. 沒有operator<< for optional所以我假設它將返回unspecified-bool-type轉換並打印1或0(true / false)。
  4. 他們不一樣。 如果i未初始化,后者將斷言,而前者將初始化並分配。 您應該使用指示您所需語義的那個。

關於第3點, 一個運營商<<升壓::可選在升壓/可選/ optional_io.hpp聲明,但你可能不包括。 (如果碰巧使用boost property_tree,它會被包含在內。)如果包含它,則一個空的可選項將作為“ - ”流,並且一個填充的可選項將流出一個額外的空格字符,然后流式傳輸該值。

所以這段代碼:

#include <boost/optional/optional_io.hpp>
boost::optional<string> var1 = "value";
boost::optional<string> var2;
cout << " var1 = '" << var1 << "'\n";
cout << "*var1 = '" << *var1 << "'\n";
cout << " var2 = '" << var2 << "'\n";

得出這個:

 var1 = ' value'
*var1 = 'value'
 var2 = '--'

但是沒有包含相同的代碼會產生這種情況,正如Mark B的回答所示:

 var1 = '1'
*var1 = 'value'
 var2 = '0'

第一種情況下的額外空間給我帶來了一些困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM