Rumah >pembangunan bahagian belakang >C++ >Apakah Perubahan Pecah Yang Perlu Saya Ketahui Apabila Menghijrahkan Kod ke C 11?

Apakah Perubahan Pecah Yang Perlu Saya Ketahui Apabila Menghijrahkan Kod ke C 11?

Susan Sarandon
Susan Sarandonasal
2024-12-24 17:19:28484semak imbas

What Breaking Changes Should I Be Aware Of When Migrating Code to C  11?

Memecahkan Perubahan dalam C 11

C 11 memperkenalkan perubahan ketara yang mungkin memberi kesan kepada penyusunan kod sedia ada, termasuk yang berikut:

Bahasa Teras

  • Bahasa pengenalan operator eksplisit bool() dalam perpustakaan standard, menggantikan contoh operator void*(). Perubahan ini mungkin menyebabkan kod yang sebelum ini bergantung pada penukaran tersirat gagal dihimpun.
  • Kata kunci baharu, termasuk alignas, alignof, char16_t, constexpr dan nullptr, mungkin bercanggah dengan pengecam sedia ada dalam kod yang tidak mengikut konvensyen penamaan .
  • Tingkah laku pembahagian integer telah berubah, kerana C 11 sentiasa membundarkan keputusan ke arah 0, manakala C 03 dibenarkan untuk pembundaran ke arah 0 atau infiniti negatif.
  • Fungsi ahli khas yang diisytiharkan secara tersirat, seperti pembina atau pemusnah, kini ditakrifkan sebagai dipadamkan jika takrifan tersiratnya tidak terbentuk, yang boleh menyebabkan kod menggunakan fungsi ini dalam konteks tertentu menjadi tidak sah.
  • Pemusnah yang diisytiharkan pengguna mempunyai spesifikasi pengecualian tersirat, bermakna mereka tidak boleh membuang pengecualian. Kod yang bergantung pada pemusnah yang membuang pengecualian mungkin perlu diubah suai.
  • Panggilan bergantung fungsi dengan pautan dalaman kini dibenarkan, yang mungkin mengubah resolusi fungsi terlampau beban dalam templat.

Perubahan Pustaka

  • Pengecam ditambahkan pada C perpustakaan standard dalam C 11 mungkin bercanggah dengan pengecam sedia ada dalam kod yang menggunakan pengepala dengan nama yang sama.
  • Fungsi swap telah dialihkan daripada pengepala ke pengepala. Kod yang merangkumi mungkin perlu dikemas kini untuk memasukkan sebaliknya.
  • Posix ruang nama global kini dikhaskan untuk penyeragaman. Kod yang mentakrifkan pengecam dalam ruang nama ini mungkin perlu diubah suai.
  • Makro yang dinamakan override, final, carries_dependency, atau noreturn adalah tidak sah dalam C 11. Kod yang mentakrifkan makro ini mungkin perlu dikemas kini.

Atas ialah kandungan terperinci Apakah Perubahan Pecah Yang Perlu Saya Ketahui Apabila Menghijrahkan Kod ke 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