SORU
21 AĞUSTOS 2012, Salı


Sabit nesneleri geri getirebilirim?

Mümkün olduğunda Effective C kalem 03, Kullanın inş.

class Bigint
{
  int _data[MAXLEN];
  //...
public:
  int& operator[](const int index) { return _data[index]; }
  const int operator[](const int index) const { return _data[index]; }
  //...
};

const int operator[] int& operator[] fark eder.

Ama ne için:

int foo() { }

ve

const int foo() { }

Aynı onlar gibi görünüyor.

Benim sorum, neden biz int operator[](const int index) const yerine const int operator[](const int index) const kullanın.

CEVAP
21 AĞUSTOS 2012, Salı


Cv-elemeleri dönüşü olmayan sınıf yazın türleri yok sayılır.üst düzey Eğer yazarsan bile anlamına gelir:

int const foo();

Dönüş tipi int. Eğer dönüş tipi bir başvuru ise, tabii ki, const artık üst seviyesi arasındaki fark

int& operator[]( int index );

ve

int const& operator[]( int index ) const;

önemli. (İşlev bildirimleri, yukarıdaki gibi,not de herhangi bir üst düzey cv-elemeleri de yok sayılır.)

Eğer bu ayrım aynı zamanda sınıf tür dönüş değerleri için geçerlidir: dönüş T const, arayan edemiyor çağrı olmayan sabit fonksiyonları üzerinde değer, örneğin geri döndüler

class Test
{
public:
    void f();
    void g() const;
};

Test ff();
Test const gg();

ff().f();             //  legal
ff().g();             //  legal
gg().f();             //  **illegal**
gg().g();             //  legal

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google Analytics

    Google Analy

    25 ŞUBAT 2008
  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • YEAH1TV

    YEAH1TV

    19 ŞUBAT 2009