2016-07-04 6 views
5

Iは、オペレータ関数の形式は奇妙な演算子オーバーロード、 "演算子T&()constはnoexcept {* _ptrを返す;}"

(return value)operator[space]op(arguments){implementation} 

であることを学んだが、std::reference_wrapper実装では、宣言されたオペレータオーバーロード機能がありますoperator T&() const noexcept { return *_ptr; }

この演算子はT& operator() const noexcept { return *_ptr; }とは異なりますか?両方が異なる場合、最初のものは何ですか?

+0

キャストを作成するための構文は何ですか(C#のようにこれと似ています) –

+0

変換演算子の形式が異なります。 –

答えて

11

operator T&() const noexcept;は、user-defined conversion functionです。

int x = 42; 
int &a = x; 
std::reference_wrapper<int> b = x; 

std::cout << a << " " << b << std::endl; 

Assignment is a little bit trickierstd::reference_wrapperは、構文を変更せずに、あなたが、格納された基準へのアクセスを提供するためにそれを持っています。


T& operator() const noexcept;operator()を宣言しようとする試みであるが、不足しているパラメータリストによるコンパイルに失敗しました。正しい構文は、

usage is completely differentです。