Senarai Pemula dalam Pembina: Nama Bertindih dengan Pembolehubah Ahli
Amalan memulakan pembolehubah ahli menggunakan nama yang sama seperti hujah pembina telah menimbulkan persoalan tentang kesahihan dan pematuhannya dengan piawaian C. Mari kita terokai perspektif standard tentang amalan ini.
Menurut piawaian C, §12.6.2/7, ungkapan dalam senarai ekspresi pemula ahli dinilai dalam skop pembina. Oleh itu, menggunakan nama yang sama untuk kedua-dua hujah pembina dan pembolehubah ahli dibenarkan secara eksplisit.
Sebagai contoh, coretan kod berikut mematuhi sepenuhnya standard C:
class Blah { std::vector<int> vec; public: Blah(std::vector<int> vec): vec(vec) {} // ... };
Dalam kes ini, hujah pembina vec digunakan untuk memulakan vec pembolehubah ahli tanpa sebarang kesamaran.
Selain itu, piawaian membenarkan penggunaan penuding ini dalam pemula ahli untuk merujuk kepada objek yang dimulakan. Ini membolehkan permulaan pembolehubah ahli berdasarkan pembolehubah ahli lain, seperti yang ditunjukkan dalam contoh berikut:
class X { int a; int b; int i; int j; public: X(int i): r(a), b(i), i(i), j(this->i) {} // ... };
Walau bagaimanapun, perlu diperhatikan bahawa menghantar parameter pembina sebagai rujukan const boleh meningkatkan kecekapan kod dengan mengelakkan penyalinan yang tidak perlu bagi objek vektor asal. Ini boleh dicapai dengan mengubah suai pembina seperti berikut:
Blah(const std::vector<int> &vec): vec(vec) {}
Atas ialah kandungan terperinci Adakah Hujah Pembina dan Nama Pembolehubah Ahli Dibenarkan Bertindih dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!