Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
Mary-Kate Olsenasal
2024-11-17 02:08:03186semak imbas

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
};

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;
};

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!

Kenyataan:
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