Các từ ngữ chính xác của tiêu chuẩn là:
Việc sử dụng các từ khóa static
bị phản đối khi tuyên bố các đối tượng trong phạm vi không gian tên.
Chức năng trong tệp tiêu đề phải là inline
thay vì static
hoặc trong không gian tên chưa đặt tên. inline
có nghĩa là bạn sẽ chỉ kết thúc với tối đa một bản sao của hàm trong chương trình của bạn, trong khi các phương pháp khác sẽ cung cấp cho bạn một bản sao riêng biệt từ mỗi tệp bao gồm tiêu đề. Cũng như sưng lên, điều này có thể cho hành vi không chính xác nếu hàm chứa dữ liệu tĩnh chức năng. (EDIT: trừ khi hàm được cho là có định nghĩa khác nhau trong các đơn vị biên dịch khác nhau, có lẽ do các macro tiền xử lý khác nhau được xác định trước khi bao gồm tệp tiêu đề. Trong trường hợp đó, cách tốt nhất là không bao gồm nó. để chôn nó trong một ngôi mộ không được đánh dấu với một cổ phần thông qua trái tim bất hạnh của nó.)
Đối tượng dữ liệu, ngoài hằng số, thường không được xác định trong tệp tiêu đề, chỉ khai báo extern
.
Chức năng thành viên tĩnh là một loại cá khác nhau và bạn phải sử dụng static
ở đó vì không có cách nào khác để khai báo chúng. Việc sử dụng đó không được chấp nhận vì nó không nằm trong phạm vi không gian tên.
CẬP NHẬT: C++ 11 đã loại bỏ việc không dùng nữa, vì vậy không còn lý do cụ thể nào để sử dụng các không gian tên chưa đặt tên trên static
. Nhưng bạn vẫn không nên sử dụng hoặc trong một tập tin tiêu đề, trừ khi bạn đang làm một cái gì đó kỳ lạ.
Nguồn
2010-10-08 14:14:31
Dường như phản tác dụng để đặt các không gian tên tĩnh (hoặc không tên) trong các tệp tiêu đề. Nếu họ là tĩnh tại sao họ không chỉ trong tập tin nguồn? –