Rumah > pembangunan bahagian belakang > C++ > Mengapakah Tugasan Tatasusunan Dibenarkan dalam Struktur tetapi Bukan untuk Tatasusunan Berdiri dalam C dan C?

Mengapakah Tugasan Tatasusunan Dibenarkan dalam Struktur tetapi Bukan untuk Tatasusunan Berdiri dalam C dan C?

Linda Hamilton
Lepaskan: 2024-12-24 21:48:15
asal
324 orang telah melayarinya

Why are Array Assignments Allowed Within Structs but Not for Standalone Arrays in C and C  ?

Tugasan Tatasusunan dalam C dan C : Pengecualian untuk Struktur dan Wawasan Falsafah

Dalam C dan C , menetapkan tatasusunan secara langsung adalah dilarang, seperti yang dicontohkan oleh yang berikut:

int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // Error: invalid array assignment
Salin selepas log masuk

Walau bagaimanapun, pengecualian timbul apabila tatasusunan ialah komponen struct:

struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
Salin selepas log masuk

Dalam kes ini, tatasusunan dalam struct boleh ditetapkan mengikut ahli. Ini menimbulkan persoalan mengapa penugasan tatasusunan mengikut ahli disokong untuk struct tetapi tidak secara amnya.

Rasional Evolusi

Asal usul tingkah laku tatasusunan terletak pada perkembangan sejarah daripada C. Dalam B dan BCPL, tatasusunan secara tersirat dianggap sebagai penunjuk yang tidak ditaip. Struktur dalam B memerlukan layanan khas untuk menampung tatasusunan, yang membawa kepada tatasusunan dalam struktur dikendalikan sebagai entiti yang dijejaki pengkompil.

Ini memerlukan penugasan tidak membenarkan tatasusunan secara umum, kerana ia memerlukan penilaian semula penunjuk asas tatasusunan. Untuk mengekalkan keserasian, penugasan tatasusunan tidak dibenarkan walaupun untuk tatasusunan dalam struktur.

Penugasan Struktur dan Kesan Sampingan

Apabila penetapan struct diperkenalkan dalam C, ia dilaksanakan sebagai memcpy ringkas memori mentah struct. Tingkah laku tugasan ini secara tidak sengaja diperluaskan kepada tatasusunan dalam struct.

Memandangkan penugasan struct sudah menjadi sebahagian daripada bahasa, sebarang percubaan untuk menukar gelagat tugasan tatasusunan mungkin telah memecahkan kod sedia ada. Akibatnya, penugasan tatasusunan dalam struct kekal sebagai pengecualian, walaupun yang tidak disengajakan.

Perspektif Falsafah

Dari perspektif reka bentuk bahasa, boleh dikatakan bahawa tatasusunan, tidak seperti structs, tidak pernah dimaksudkan sebagai warganegara kelas pertama. Kefungsian mereka sebagai penunjuk mengutamakan keserasian ke belakang berbanding potensi manfaat ergonomik.

Selain itu, memperkenalkan tugasan tatasusunan umum akan menyebabkan komplikasi, seperti kemungkinan mencipta penunjuk dan kebocoran memori secara tidak sengaja.

Kesimpulan

Sokongan untuk tugasan tatasusunan ahli dalam struct ialah artifak sejarah yang berpunca daripada evolusi awal C. Ia berterusan disebabkan kebimbangan keserasian dan berfungsi sebagai peringatan kepada falsafah reka bentuk asas bahasa yang mengutamakan kesederhanaan dan keserasian ke belakang.

Atas ialah kandungan terperinci Mengapakah Tugasan Tatasusunan Dibenarkan dalam Struktur tetapi Bukan untuk Tatasusunan Berdiri dalam C dan 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