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

Linda Hamilton
Lepaskan: 2024-11-16 08:30:03
asal
653 orang telah melayarinya

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

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

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!

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