2014-06-09 33 views
1

如果我有一個方法,一個可選的參數作爲的boost ::可選<size_t>&=的boost ::無compilatin錯誤

boost::optional<size_t>& currentPos = boost::none; 

我得到這個編譯錯誤

error: default argument for 'boost::optional<unsigned int>& currentPos' has type 'int boost::detail::none_helper::* const' 

我不能用boost::noneboost::optional<size_t>&

+0

讓它升壓::可選 currentPos = boost :: none; –

回答

2

boost::none不是全球通用的boost::optional<T>值(的確,T會是什麼?)。相反,它是一個幫助標記值,它允許實際boost::optional<T>實例的構造。所以你只能從中創建一個新的臨時值,但臨時值不能綁定到非const引用。

請將您的參考改爲常量或您的設計。

1

雖然make_optional(T x);知道它需要從其參數的類型創建optional<T>,但none沒有參數。如果C++中的類型系統具有真正的多態性,它將會輸入for all T, optional<T>。但是在C++中沒有參數多態,所以none是幻影類型none_t的值,可以投射到optional<T>中的任何一個。小心傳遞它。

關於你的問題,請看nonedefinition

none_t const none = (static_cast<none_t>(0)) ; 

這不是很明顯,你不能

  • 使非const引用(這意味着改變它引用到變量的值),以恆定的變量?
  • optional<T>類型的參考轉換爲none_t類型的變量,該變量不是optional<T>的子類型?
相關問題