2013-09-05 23 views
5

cppreference numaralı telefondan std::optional<T> numaralı API'ya bakıyordum. value_or'un nasıl çalışacağını merak ettim.İşleve devam et & && işlev bildirimi

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

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

işlevi bildirimi sondaki const& ve && nelerdir: orada bakıldığında iki aşırı yükler vardır görünüyor? Bir işlevi const olarak bildirme ve const& olarak bildirme arasındaki fark nedir?

+0

Bu, derleyicilerin son zamanlarda destek aldığı bir C++ 11 özelliğidir. – chris

+0

@chris Cheers. Bu konuya rumuz referansları biliyordum, ama muhtemelen uygulanacak son özelliklerden biri olduğundan, onlara hiç bakma zahmetine girmedim. – Yuushi

+0

@chris Dürüst olmak gerekirse, bu sorunun cevabını C++ primer'de bir süre önce gördüm, çok kötü bir şekilde bir dupe olduğunu fark etmemiştim :( – aaronman

cevap

2

fonksiyon this bir lvalue tersine çift ve işaretinin bir rval olması gerektiği anlamına gelir olması gerektiği anlamına gelir sonra, const sadece Yani bir işlev & ile nitelikli bir Değiştirilemez lval veya rval

olduğunu söylüyor ampresand Bir tek Değiştirilebilir bir lval üzerinde çalışır ve && ile uyumlu olması durumunda sadece bir rval üzerinde çalışır. const &&, const & geçici olarak bağlanabileceğinden, sanırım, const niteleyicisi yalnızca lval için herhangi bir şey yapabildiğinden, bir anlam ifade etmiyor.

İlgili konular