Rumah > pembangunan bahagian belakang > C++ > Bolehkah Ahli Data Kelas Dimulakan Terus dalam C?

Bolehkah Ahli Data Kelas Dimulakan Terus dalam C?

Barbara Streisand
Lepaskan: 2024-11-15 02:14:02
asal
411 orang telah melayarinya

Can Class Data Members Be Initialized Directly in C  ?

Bolehkah Ahli Data Kelas Dimulakan Terus?

Dalam C , ahli data kelas tidak boleh dimulakan menggunakan sintaks pemulaan langsung, (), seperti yang dilihat dalam contoh berikut :

#include <iostream>

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

int main() {
    test t;
    t.fun();
    return 0;
}
Salin selepas log masuk

Kompilasi gagal dengan ralat:

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant
Salin selepas log masuk

Mengapakah ini berlaku?

Piawaian C secara jelas melarang sintaks ini untuk permulaan ahli data kelas. Cadangan awal untuk pengenalan ciri menyebut masalah penghuraian sebagai sebab.

Pertimbangkan contoh samar-samar ini:

struct S {
    int i(x); // data member with initializer or...
    // ...
    static int x;
    int i(y); // member function declaration
    // ...
    typedef int y;
};
Salin selepas log masuk

Piawaian mencadangkan penyelesaian:

Untuk menghapuskan kekaburan, standard C membenarkan hanya sintaks berikut untuk data kelas permulaan ahli:

  • = klausa pemula
  • { senarai permulaan }

Penyelesaian ini memastikan kejelasan dan mengelakkan potensi salah faham dalam kes di mana pengisytiharan boleh menyerupai kedua-dua objek dan pengisytiharan fungsi.

Atas ialah kandungan terperinci Bolehkah Ahli Data Kelas Dimulakan Terus 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