Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah `constexpr` Menyiratkan `sebaris` dalam C 11?

Adakah `constexpr` Menyiratkan `sebaris` dalam C 11?

Susan Sarandon
Susan Sarandonasal
2024-11-03 19:05:29943semak imbas

Does `constexpr` Imply `inline` in C  11?

Adakah Constexpr Menyiratkan Sebaris dalam C 11?

Piawaian C 11 memperkenalkan penentu constexpr, yang membolehkan fungsi dan pembolehubah dinilai pada masa menyusun. Ini telah membawa kepada beberapa kekeliruan tentang hubungan antara constexpr dan sebaris.

Penentukan sebaris mengarahkan pengkompil untuk melaksanakan pengembangan sebaris fungsi. Ini bermakna kod fungsi akan dimasukkan terus ke dalam kod tempat fungsi dipanggil, dan bukannya mencipta fungsi berasingan yang dipanggil secara tidak langsung.

Penentukan constexpr tidak secara eksplisit membayangkan penentu sebaris. Walau bagaimanapun, piawaian C 11 menyatakan bahawa "fungsi constexpr dan pembina constexpr secara tersirat sebaris" (§7.1.5/2).

Implikasi

Ini bermakna bahawa pengkompil dikehendaki mengikut peraturan yang sama untuk fungsi constexpr seperti yang dilakukan untuk fungsi sebaris. Khususnya, pengkompil boleh menyelaraskan fungsi, walaupun ia dipanggil dengan argumen bukan malar.

Contoh

Pertimbangkan contoh berikut:

<code class="cpp">#include <iostream>
#include <cstdlib>

inline int f(const int x)
{
    return 2*x;
}

int main(int argc, char* argv[])
{
    return f(std::atoi(argv[1]));
}</code>

Dalam contoh ini, fungsi f adalah sebaris, walaupun ia dipanggil dengan hujah tidak tetap. Ini kerana fungsi f diisytiharkan sebagai sebaris.

Kesimpulan

Penentukan constexpr tidak secara eksplisit membayangkan penentu sebaris. Walau bagaimanapun, piawaian C 11 memerlukan pengkompil untuk berkelakuan seolah-olah fungsi constexpr adalah fungsi sebaris. Ini bermakna pengkompil boleh menyelaraskan fungsi constexpr dengan selamat, walaupun ia dipanggil dengan hujah tidak tetap.

Atas ialah kandungan terperinci Adakah `constexpr` Menyiratkan `sebaris` dalam C 11?. 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