Type Deduction with Double Parentheses in decltype
Dalam C , kata kunci decltype boleh digunakan untuk menentukan jenis ungkapan. Apabila digunakan dengan kurungan berganda, ia menunjukkan tingkah laku halus yang boleh membawa kepada kekeliruan.
Masalah:
Pertimbangkan coretan kod berikut:
<code class="cpp">const int&&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // type is const int&&& decltype(i) x2; // type is int decltype(a->x) x3; // type is double decltype((a->x)) x4 = x3; // type is const double&</code>
Mengapakah menambah kurungan pada a->x dalam baris keempat mengubah jenis yang terhasil daripada double kepada const double&?
Jawapan:
Penjelasan terletak pada peraturan untuk menyimpul jenis menggunakan decltype. Mengikut standard bahasa C:
Dalam contoh yang diberikan:
Oleh itu, menambah kurungan pada a->x menukar potongan jenis daripada jenis ahli yang diakses kepada rujukan kepada ahli itu sendiri.
Atas ialah kandungan terperinci Mengapa Menggunakan Tanda Kurung Berganda dalam `decltype` Mengubah Jenis Terhasil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!