Kode berikut tidak dikompilasi.
int a = 1, b = 2, c = 3;
int& arr[] = {a,b,c,8};
Apa yang dikatakan standar C ++ tentang ini?
Saya tahu saya bisa mendeklarasikan kelas yang berisi referensi, lalu membuat array kelas itu, seperti yang ditunjukkan di bawah ini. Tetapi saya benar-benar ingin tahu mengapa kode di atas tidak dapat dikompilasi.
struct cintref
{
cintref(const int & ref) : ref(ref) {}
operator const int &() { return ref; }
private:
const int & ref;
void operator=(const cintref &);
};
int main()
{
int a=1,b=2,c=3;
//typedef const int & cintref;
cintref arr[] = {a,b,c,8};
}
Dimungkinkan untuk menggunakan struct cintref
alih-alih const int &
mensimulasikan array referensi.
intlink value = 8;
tidak bekerja. periksa apakah Anda tidak percaya.
operator=
. Referensi tidak dapat diulang. Jika Anda benar-benar ingin semantik seperti - meskipun saya tidak secara pribadi menemukan situasi di mana mereka praktis berguna - maka std::reference_wrapper
akan menjadi cara untuk melakukannya, karena sebenarnya menyimpan pointer tetapi menyediakan referensi-seperti operator
dan tidak memungkinkan reseating. Tapi kemudian saya hanya menggunakan pointer!