Aplikasi Lanjutan decltype
Dalam C , pengendali decltype ialah alat yang berkuasa untuk menentukan jenis ungkapan. Walaupun ia biasanya beroperasi seperti yang anda jangkakan, terdapat keadaan di mana penggunaan kurungan berganda boleh membuat perbezaan yang ketara.
Seperti yang dinyatakan dalam FCD (§7.6.1.2/4):
const int&&& foo(); int i; struct A { double x; }; const A* a = new A();
Pertimbangkan contoh berikut:
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&
Timbul persoalan: mengapa tanda kurung membuat perbezaan pada baris terakhir? Secara intuitif, seseorang mungkin menganggap bahawa ia sepatutnya dua kali ganda, serupa dengan baris di atas.
Walau bagaimanapun, FCD memberikan beberapa cerapan:
Dalam kes ini, decltype(a->x) ialah akses ahli kelas, dan oleh itu, x3 mempunyai jenis entiti yang dinamakan oleh a->x, iaitu dua kali ganda. Walau bagaimanapun, decltype((a->x)) ialah nilai l, dan oleh itu, x4 mempunyai jenis a->x, iaitu const double&.
Pembezaan ini adalah halus tetapi kritikal dalam memahami nuansa decltype. Dengan memanfaatkan kuasa kurungan berganda, pengaturcara boleh memanipulasi dan menentukan jenis dengan lebih ketepatan, membolehkan kod yang lebih mantap dan fleksibel.
Atas ialah kandungan terperinci Mengapa Tingkah Laku `decltype` Berubah dengan Tanda Kurung Berganda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!