C : dönüş değeri L-değer mi?
Bu kodu göz önünde bulundurun:
struct foo
{
int a;
};
foo q() { foo f; f.a =4; return f;}
int main()
{
foo i;
i.a = 5;
q() = i;
}
Derleyici, Çınlama yakınıyor. q() = ...
satır neden mi?
CEVAP
Hayır, bir işlevin dönüş değeri l değeri eğer bir başvuru ise, yalnızca ve (C 03). (5.2.2 [ifade.çağrı] / 10)
Eğer döndürülen türü temel bir yazın olsaydı bu bir derleme hatası olur. (5.17 [ifade.kıçını] / 1)
Neden bu iş senin izin arayıp üye fonksiyonları (hatta olmayanconst
üye fonksiyonlar) r-değer sınıf tip ve atama foo
bir uygulama tanımlı üye işlev: foo& foo::operator=(const foo&)
. Madde 5 operatörlerine kısıtlamaları yalnızca uygulanıryerleşik operatörler, (5 [ifade] / 3), eğer aşırı çözümleme operatörü için aşırı bir işlev çağrısı seçerse o zaman bu fonksiyon için arama kısıtlamalarını uygulamak yerine.
Bu nedenle bazen önerilen dönmek nesne sınıfı türü const
nesneler (örneğin const foo q();
), ancak bu bir olumsuz etkisi C 0 x nerede olabilir engelleyen hareket semantiği çalışma olarak.
Eğer Spring MVC denetleyicisi yöntemi&...
Sigara bulundu anahtarları için varsay...
Ne kadar zarif hesapların yapılabilmes...
Visual Studio hata ayıklama sırasında ...
nasıl bir dönüş değeri almak için pyth...