Rumah > pembangunan bahagian belakang > C++ > Mengapakah Sintaks Permulaan Langsung Dilarang untuk Ahli Data Kelas dalam C ?

Mengapakah Sintaks Permulaan Langsung Dilarang untuk Ahli Data Kelas dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-11-17 02:08:03
asal
243 orang telah melayarinya

Why is Direct Initialization Syntax Forbidden for Class Data Members in C  ?

Mengapa Sintaks Permulaan Langsung Dilarang untuk Ahli Data Kelas

Ahli data kelas C tidak boleh dimulakan menggunakan sintaks permulaan langsung (ungkapan- senarai) disebabkan kesamaran penghuraian yang berpotensi. Ini jelas dalam contoh yang disediakan:

class test {
    private:
        int s(3); // Compiler error
};
Salin selepas log masuk

Pengkompil menimbulkan ralat:

  • "pengecam dijangka sebelum pemalar berangka"
  • "dijangka ',' atau '...' sebelum pemalar berangka"

Menurut Piawaian C, data ahli hanya boleh dimulakan menggunakan sintaks berikut:

  • Pemulaan tugasan: = initializer-clause
  • Brace initialization: { initializer- senaraikan }

Sebab untuk Sekatan

Sintaks pemulaan langsung sengaja ditinggalkan untuk ahli data kelas bagi mengelakkan kekaburan. Menghuraikan pengisytiharan berikut mungkin mencabar:

struct S {
    int i(x); // data member with initializer?
    static int x;
};

struct T {
    int i(x); // member function declaration?
    typedef int x;
};
Salin selepas log masuk

Jika sintaks pemulaan langsung dibenarkan, adalah tidak jelas sama ada int i(x) mewakili ahli data dengan pemula atau pengisytiharan fungsi ahli. Kekaburan ini juga akan menjejaskan templat.

Untuk menyelesaikan masalah penghuraian ini, Jawatankuasa Piawaian C memutuskan untuk melarang sintaks permulaan langsung untuk ahli data kelas dan menyimpannya untuk pengisytiharan fungsi dan pembolehubah setempat.

Atas ialah kandungan terperinci Mengapakah Sintaks Permulaan Langsung Dilarang untuk Ahli Data Kelas 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