Dự thảo tiêu chuẩn C ++ 17 về const
ngụ ý static
ở phạm vi tệp
Đây là trích dẫn cho những gì đã được đề cập tại: https://stackoverflow.com/a/3709257/895245
Dự thảo tiêu chuẩn C ++ 17 n4659 6.5 "Chương trình và liên kết":
3 Tên có phạm vi không gian tên (6.3.6) có liên kết bên trong nếu đó là tên của
- (3.1) - một mẫu biến, hàm hoặc hàm được khai báo tĩnh; hoặc là,
- (3.2) - một biến không nội tuyến của loại không đủ điều kiện const không dễ bay hơi, không được khai báo rõ ràng bên ngoài và trước đó được tuyên bố là có liên kết bên ngoài; hoặc là
- (3.3) - một thành viên dữ liệu của một liên minh ẩn danh.
Phụ lục C (thông tin) Tính tương thích, C.1.2 Khoản 6: "các khái niệm cơ bản" đưa ra lý do tại sao điều này được thay đổi từ C:
6.5 [cũng 10.1.7]
Thay đổi: Tên của phạm vi tệp được khai báo rõ ràng const và không được khai báo bên ngoài rõ ràng, có liên kết bên trong, trong khi ở C, nó sẽ có liên kết ngoài.
Đặt vấn đề: Vì các đối tượng const có thể được sử dụng làm giá trị trong quá trình dịch trong C ++, tính năng này thúc giục các lập trình viên cung cấp một trình khởi tạo rõ ràng cho từng đối tượng const. Tính năng này cho phép người dùng đặt các đối tượng const trong các tệp nguồn được bao gồm trong nhiều đơn vị dịch thuật.
Ảnh hưởng đến tính năng gốc: Thay đổi thành ngữ nghĩa của tính năng được xác định rõ.
Khó chuyển đổi: Chuyển đổi ngữ nghĩa.
Cách sử dụng rộng rãi: Ít khi.
Xem thêm: Tại sao const ngụ ý liên kết nội bộ trong C ++, khi nó không có trong C?
Thay vào đó, những gì bạn có thể muốn làm
Giải thích chi tiết tại: 'const static' có nghĩa là gì trong C và C ++?
- pre C ++ 17:
extern
trong tiêu đề, định nghĩa trong tệp cpp
- bài C ++ 17: biến nội tuyến trên tiêu đề
static
có lẽ là từ khóa quá tải nhất trong C ++. Ý nghĩa mã của bạn rất khác nhau tùy thuộc vào việc nó ở phạm vi không gian tên, ở phạm vi lớp hay ở phạm vi chức năng. Bạn có thể muốn làm rõ điều đó.