Mengapa Kelas C Tidak Boleh Mempunyai Pemalar Statik Bukan Integral?

Mary-Kate Olsen
Lepaskan: 2024-10-23 14:45:04
asal
149 orang telah melayarinya

Why Can't C   Classes Have Non-Integral Static Constants?

Pemalar Statik Bukan Integral dalam Kelas C: Mengapa Tidak?

Dalam C , ahli const statik kelas tidak boleh bukan bersepadu jenis. Tingkah laku ini mungkin kelihatan membingungkan, memandangkan bahasa membenarkan jenis integral seperti int dan tidak bertanda.

Sebabnya

Sebab asas sekatan ini terletak pada pertimbangan pengoptimuman. Dengan jenis integral, pengkompil sering mengoptimumkan dengan menyelaraskan nilai malar terus ke dalam kod sekeliling. Ini menghapuskan keperluan untuk alamat memori untuk pemalar ini, mengurangkan overhed pembolehubah.

Walau bagaimanapun, untuk jenis bukan kamiran seperti berganda, pengkompil tidak boleh sentiasa melakukan inlining sedemikian. Ini kerana operasi pada jenis bukan kamiran mungkin memerlukan pengiraan titik terapung, yang tidak boleh dioptimumkan dengan mudah. Akibatnya, pengkompil mesti mencipta alamat memori untuk pemalar dan mengaksesnya melalui pembolehubah.

Contoh

Pertimbangkan kod berikut:

<code class="cpp">class No_Good {
  static double const d = 1.0;
};</code>
Salin selepas log masuk

Di sini, pengkompil tidak boleh menyelaraskan pemalar d, kerana nilai berganda memerlukan operasi titik terapung. Oleh itu, ia mesti mencipta alamat memori untuk d, yang tidak dibenarkan oleh standard C.

Penyelesaian

Untuk mengelakkan sekatan ini, anda boleh mengisytiharkan pemalar sebagai berfungsi dan bukannya ahli statik. Contohnya:

<code class="cpp">class Now_Good {
  static double d() { return 1.0; }
};</code>
Salin selepas log masuk

Ini membolehkan pengkompil menyelaraskan nilai d apabila boleh, sambil masih mengekalkan semantik pemalar.

Atas ialah kandungan terperinci Mengapa Kelas C Tidak Boleh Mempunyai Pemalar Statik Bukan Integral?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!