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

Bolehkah Ahli Data Kelas Dimulakan Terus dalam C?

Barbara Streisand
Barbara Streisandasal
2024-11-15 02:14:02409semak imbas

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

Kompilasi gagal dengan ralat:

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant

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

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!

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