2013-09-05 7 views
5

std::optional<T>のAPIをcppreferenceに探していました。私は好奇心がどのようにvalue_orが働くだろう。そこに見ると、2つのオーバーロードがあるようだ。後続のconst&または&&関数宣言で

template< class U > 
constexpr T value_or(U&& value) const&; 

template< class U > 
T value_or(U&& value) &&; 

は、関数宣言を末尾const&&&何ですか?関数を宣言してconstとし、それをconst&と宣言することとの違いは何ですか?

+0

これは実際にはコンパイラが最近サポートを得ているC++ 11の機能です。 – chris

+0

@chris乾杯。私は*これに対する評価値の参照を知っていましたが、それはおそらく実装される最後の機能の1つなので、私はそれらをまったく調べることに気にしませんでした。 – Yuushi

+0

@chris正直なところ私はこの質問に答えるのを待っていました。私はC++の答えを少し前に見ましたが、あまりにも悪いとは思いませんでした。 – aaronman

答えて

2

アンampresand機能がthisは左辺値でなければならないことを意味した後、逆に二重のアンパサンドが、それはrvalになければならないことを意味し、constがちょうどそれがそうだけ&で修飾機能変更不可能LVALまたはrvalに

だと言います変更可能なlvalで動作し、&&で修飾されている場合は、rvalでのみ動作します。 const &&は実際には意味がありません。const &は一時的にバインドできるので、const修飾子はlvalに対して何もしません。

関連する問題