Mengapakah GCC Memerlukan Akses Ahli Eksplisit untuk Ahli Kelas Asas Templat?

DDD
Lepaskan: 2024-11-01 10:52:02
asal
849 orang telah melayarinya

Why Does GCC Require Explicit Member Access for Template Base Class Members?

Penguatkuasaan Tegas Ketergantungan Argumen Templat GCC

Kod yang dibentangkan menimbulkan isu yang berlaku apabila menggunakan GCC, tetapi tidak dengan Visual Studio. Kod berikut:

<code class="cpp">template <typename T> class A {
    public:
        T foo;
};

template <typename T> class B: public A<T> {
    public:
        void bar() { cout << foo << endl; }
};
Salin selepas log masuk

gagal untuk menyusun dengan GCC, tetapi berjaya menyusun dengan Visual Studio. Ralat menggesa pembangun untuk menambah ini-> kepada ungkapan untuk mengakses ahli foo dalam bar kaedah.

Tingkah laku ini berpunca daripada pematuhan ketat GCC kepada spesifikasi C. Versi terdahulu GCC membuat kesimpulan akses ahli daripada kelas asas templat dengan menghuraikannya. Walau bagaimanapun, ISO C menganggap inferens ini berpotensi bermasalah dan telah menafikannya.

Penyelesaian dalam senario ini adalah dengan merujuk secara eksplisit ahli foo menggunakan ini-> atau untuk menentukan kelas asas secara eksplisit, seperti yang ditunjukkan dalam contoh berikut:

<code class="cpp">template <typename T> class A {
    public:
        T foo;
};

template <typename T> class B: public A<T> {
    public:
        void bar() { cout << A<T>::foo << endl; }
};</code>
Salin selepas log masuk

Dengan berbuat demikian, GCC boleh menentukan jenis kelas asas dan menyelesaikan akses ahli dengan sewajarnya.

Atas ialah kandungan terperinci Mengapakah GCC Memerlukan Akses Ahli Eksplisit untuk Ahli Kelas Asas Templat?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!