Rumah >pembangunan bahagian belakang >C++ >Adakah GCC Membenarkan Fungsi Perpustakaan Standard Bukan Constexpr dalam Konteks Constexpr?

Adakah GCC Membenarkan Fungsi Perpustakaan Standard Bukan Constexpr dalam Konteks Constexpr?

Barbara Streisand
Barbara Streisandasal
2024-11-29 20:03:12325semak imbas

Does GCC Allow Non-Constexpr Standard Library Functions in Constexpr Contexts?

Bolehkah Fungsi Perpustakaan Standard Bukan Constexpr Diperlakukan sebagai Constexpr dalam GCC?

GCC menyusun kod yang memulakan pembolehubah constexpr statik dengan bukan constexpr fungsi perpustakaan standard tanpa mengeluarkan amaran, seperti fungsi dalam contoh di bawah:

#include <cmath>

struct foo {
  static constexpr double a = std::cos(3.);
  static constexpr double c = std::exp(3.);
  static constexpr double d = std::log(3.);
  static constexpr double e1 = std::asin(1.);
  static constexpr double h = std::sqrt(.1);
  static constexpr double p = std::pow(1.3,-0.75);
};

Menurut piawaian C 11 dan C 14, fungsi bukan constexpr tidak boleh digunakan dalam ungkapan tetap. Walau bagaimanapun, GCC menganggap beberapa fungsi perpustakaan standard terbina dalam sebagai constexpr, walaupun ia tidak ditandakan sedemikian secara eksplisit.

Tingkah laku ini ialah sambungan tidak mematuhi dalam C 14. Draf C 14 standard melarang pelaksanaan daripada mengisytiharkan tandatangan fungsi perpustakaan standard sebagai constexpr melainkan diperlukan secara eksplisit.

Dalam C 11, konsensus beralih daripada membenarkan lanjutan ini kepada melarangnya. Ini kerana pelaksanaan berbeza yang merawat fungsi secara berbeza boleh membawa kepada perbezaan dalam tingkah laku apabila menggunakan SFINAE.

GCC pada mulanya bergantung pada cadangan resolusi awal isu LWG 2013, yang membenarkan pelaksanaan mengisytiharkan sebarang fungsi sebagai konstexpr jika ia memenuhi syarat tertentu. kekangan. Inilah sebabnya mengapa GCC menganggap fungsi ini sebagai constexpr dalam mod pematuhan ketat.

Walau bagaimanapun, peleraian berubah dalam C 14 dan sambungan ini kini dianggap tidak mematuhi. GCC dijangka menangani isu ini dan sama ada mengeluarkan amaran atau melumpuhkan kelakuan ini dalam mod pematuhan yang ketat.

Perhatikan bahawa intrinsik pengkompil tidak diliputi oleh isu ini, jadi menggunakannya dalam konteks konteks harus dibenarkan.

Atas ialah kandungan terperinci Adakah GCC Membenarkan Fungsi Perpustakaan Standard Bukan Constexpr dalam Konteks Constexpr?. 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