Apakah Maksud Tanda Kurung Berganda dalam decltype((...))?
Standard C mentakrifkan kelakuan decltype(( ...)) sintaks dalam bahagian 7.6.1.2/4 FCD. Sintaks ini membolehkan pengaturcara menyimpulkan jenis ungkapan, seperti yang ditunjukkan dalam contoh 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>
Kehadiran tanda kurung di sekeliling ungkapan dalam decltype((a->x)) membuat perbezaan yang ketara dalam jenis yang disimpulkan. Tanpa kurungan, jenisnya hanya dua kali ganda, menunjukkan jenis pulangan akses ahli (a->x).
Walau bagaimanapun, dengan kurungan, ungkapan itu menjadi lnilai. Mengikut piawai, jika e ialah nilai l, decltype(e) ialah T&, dengan T ialah jenis e. Dalam kes ini, T adalah dua kali ganda, dan jenis yang disimpulkan adalah const double&.
Oleh itu, kurungan dalam decltype((a->x)) memaksa potongan untuk menganggap ungkapan sebagai nilai l, menghasilkan dalam jenis yang berbeza daripada jika tanda kurung telah ditinggalkan.
Atas ialah kandungan terperinci Apakah Kesan Tanda Kurung dalam `decltype((...))`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!