Rumah >pembangunan bahagian belakang >C++ >Mengapakah Ahli Data Kelas Tidak Boleh Dimulakan Menggunakan Sintaks Terlampir Dakap?

Mengapakah Ahli Data Kelas Tidak Boleh Dimulakan Menggunakan Sintaks Terlampir Dakap?

Linda Hamilton
Linda Hamiltonasal
2024-11-16 08:30:03718semak imbas

Why Can't Class Data Members Be Initialized Using Brace-Enclosed Syntax?

Mengapa Sintaks Permulaan Langsung Ahli Data Kelas Dilarang

Dalam C , ahli data kelas tidak boleh dimulakan menggunakan ( ) sintaks yang disertakan dengan pendakap. Pertimbangkan kod berikut:

class test {
public:
    void fun() {
        int a(3);
        std::cout << a << '\n';
    }

private:
    int s(3);    // Compiler error
};

Kompilasi gagal dengan ralat seperti:

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

Jadi, mengapa had ini?

Menurut cadangan awal C dan perbincangan standard, larangan itu bertujuan mencegah kekaburan penghuraian . Jika pengamulaan yang disertakan dengan pendakap dibenarkan, pengkompil berpotensi menyalahtafsirkan pengisytiharan dalam situasi seperti:

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

Di sini, tidak jelas sama ada i(x) ialah pemula ahli data atau pengisytiharan fungsi ahli, kerana kedua-duanya mengikuti sintaks yang sama.

Untuk menangani kekaburan ini, C memilih sekatan berikut:

  • Ahli data mesti dimulakan menggunakan sama ada sintaks = initializer-clause atau { initializer-list } .
  • Fungsi ahli mesti sentiasa menggunakan sintaks () {} untuk pengisytiharan.

Keputusan ini mengelakkan isu penghuraian dan memastikan kejelasan dalam kod.

Atas ialah kandungan terperinci Mengapakah Ahli Data Kelas Tidak Boleh Dimulakan Menggunakan Sintaks Terlampir Dakap?. 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