Rumah > pembangunan bahagian belakang > C++ > Adakah Hujah Pembina dan Nama Pembolehubah Ahli Dibenarkan Bertindih dalam C?

Adakah Hujah Pembina dan Nama Pembolehubah Ahli Dibenarkan Bertindih dalam C?

Mary-Kate Olsen
Lepaskan: 2024-11-12 21:49:01
asal
559 orang telah melayarinya

Are Constructor Argument and Member Variable Names Allowed to Overlap in C  ?

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) {}

  // ...
};
Salin selepas log masuk

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) {}

  // ...
};
Salin selepas log masuk

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) {}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan