2016-07-04 24 views
5

Ben std::reference_wrapper uygulamasında, operatör fonksiyonları biçimiGarip operatör yükleme, "operatör T &() const noexcept {return * _ptr;}"

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

olduğunu çalışılan Ama işlevini aşırı bir operatör beyan olduğunu operator T&() const noexcept { return *_ptr; }.

Bu işleç T& operator() const noexcept { return *_ptr; }? 'Dan farklı mıdır? Eğer ikisi de farklıysa, o zaman ilk olanın kullanımı nedir?

+0

Döküm oluşturmanın sözdiziminin ne olduğunu soruyorum (C# 'de olduğu gibi buna benzer) –

+0

biçimi, dönüşüm operatörleri için farklıdır. –

cevap

11

operator T&() const noexcept;, user-defined conversion function'dir.

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

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

Assignment is a little bit trickier: std::reference_wrapper sözdizimi değiştirmeden sen saklanan referans erişim sağlayacak amacıyla o vardır.


T& operator() const noexcept;operator() ilan etme girişimidir, fakat eksik parametre listesine derlemek için başarısız olur. Doğru sözdizimi olacaktır:

T& operator()() const noexcept; 
//   ^
//  parameters here 

ve usage is completely different.