SORU
24 Mayıs 2011, Salı


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
24 Mayıs 2011, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cristina Landa

    Cristina Lan

    28 Ocak 2010
  • Semantic Mastery

    Semantic Mas

    30 EKİM 2013
  • Thom Hall

    Thom Hall

    24 Kasım 2006