Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Kelas C Tidak Boleh Mempunyai Pemalar Statik Bukan Integral?

Mengapa Kelas C Tidak Boleh Mempunyai Pemalar Statik Bukan Integral?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-23 14:45:04150semak imbas

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>

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>

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!

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