Contoh:
typedef enum Color
{
RED,
GREEN,
BLUE
} Color;
void func(unsigned int& num)
{
num++;
}
int main()
{
Color clr = RED;
func(clr);
return 0;
}
Saya mendapatkan kesalahan berikut ketika saya kompilasi ini:
<source>: In function 'int main()':
<source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' to an rvalue of type 'unsigned int'
func(clr);
^~~
Saya pikir variabel ( clr
) yang saya berikan func(unsigned int&)
adalah lvalue. Saya bisa mendapatkan alamat clr
dan memberikan nilai lain untuk itu. Mengapa itu berubah menjadi nilai ketika saya mencoba meneruskannya func(unsigned int&)
?
enum
aunsigned int
?typedef enum
ini bukan tipe asli, dan C ++ akan memperlakukannya sebagaiunsigned int
tipe.clr
.enum type
memperlakukan sepertiunsigned int
di C ++.enum X
adalah tipe sendiri, berbeda dariint
Jawaban:
clr
itu sendiri adalah lvalue tipeColor
. Tetapi fungsi tidak menerima aColor
. Ia menerima (referensi ke)unsigned int
. Jadi, argumennya dikonversi (secara implisit). Dan hasil konversi adalah nilai jenisunsigned int
.sumber
func(Color&)
sebelum saya mengajukan pertanyaan, dan itu mengkompilasi lulus. Saya hanya berpikir C ++ akan memperlakukanenum
tipe sebagaiunsigned int
tipe dalam kompilasi. Terima kasih atas jawaban anda.enum ketik init dan penugasan harus enum di dalam, jadi tipe enum tidak bisa bernilai rendah。 batal fungsi (unsigned int & num) fungsi ini perlu jenis kutipan
sumber
func(unsigned int&)
menjadifunc(Color&)
, kompilator menerimanya. Jadi saya pikir variabel tipe enum adalah nilai.func(Color&)
, dan lulus.