C ++ 17 draft standar pada const
menyiratkan static
pada lingkup file
Ini adalah kutipan untuk apa yang disebutkan di: https://stackoverflow.com/a/3709257/895245
C ++ 17 n4659 konsep standar 6.5 "Program dan tautan":
3 Nama yang memiliki lingkup namespace (6.3.6) memiliki hubungan internal jika itu adalah nama
- (3.1) - variabel, fungsi atau templat fungsi yang secara eksplisit dinyatakan statis; atau,
- (3.2) - variabel non-inline dari tipe const-kualifikasi non-volatil yang tidak secara eksplisit dinyatakan eksternal atau sebelumnya dinyatakan memiliki hubungan eksternal; atau
- (3.3) - anggota data dari serikat anonim.
Lampiran C (informatif) Kompatibilitas, C.1.2 Klausul 6: "konsep dasar" memberikan alasan mengapa ini diubah dari C:
6.5 [juga 10.1.7]
Ubah: Nama ruang lingkup file yang secara eksplisit dinyatakan const, dan tidak secara eksplisit dinyatakan extern, memiliki tautan internal, sedangkan di C akan memiliki tautan eksternal.
Dasar Pemikiran: Karena objek const dapat digunakan sebagai nilai selama terjemahan dalam C ++, fitur ini mendesak pemrogram untuk menyediakan inisialisasi eksplisit untuk setiap objek const. Fitur ini memungkinkan pengguna untuk meletakkan objek const dalam file sumber yang termasuk dalam lebih dari satu unit terjemahan.
Efek pada fitur asli: Ubah ke semantik fitur yang terdefinisi dengan baik.
Kesulitan mengkonversi: Transformasi semantik.
Seberapa luas digunakan: Jarang.
Lihat juga: Mengapa const menyiratkan hubungan internal dalam C ++, padahal tidak dalam C?
Apa yang Anda mungkin ingin lakukan sebagai ganti header
Dijelaskan secara rinci di: Apa arti 'const static' dalam C dan C ++?
- pre C ++ 17:
extern
di header, definisi dalam file cpp
- posting C ++ 17: variabel inline pada header
static
mungkin kata kunci yang paling banyak dimuat di C ++. Arti kode Anda sangat bervariasi tergantung pada apakah itu di lingkup namespace, di lingkup kelas, atau di lingkup fungsi. Anda mungkin ingin mengklarifikasi itu.