2012-12-27 30 views
5

thường trong tiêu đề tôi thấyCó cần thiết tĩnh khi khai báo const globals không?

//global namespace, not in class 
static const int my_global =1984; 

nhưng gần đây tôi biết rằng const ngụ ý liên kết nội bộ, vì vậy tôi tự hỏi điều đó không làm cho tĩnh không cần thiết?

+0

Làm thế nào để bạn cảm thấy mọi thứ là mâu thuẫn/dư thừa? Tôi không thấy chúng như thế nào. "tĩnh" sẽ cung cấp cho khai báo liên kết nội bộ *** cũng ***, đó là một điều khác nhau anyway.Nó không thừa: không liên quan – sehe

+0

Nếu không có 'tĩnh' sẽ có một định nghĩa mới của biến mỗi khi tiêu đề là #included – acraig5075

+0

@ acraig5075 Tôi không hiểu ... bảo vệ tiêu đề đảm bảo rằng bạn chỉ bao gồm một lần , ngay cả khi bạn bao gồm 50x trong mã của mình với #include – NoSenseEtAl

Trả lời

6

Điều đó tùy thuộc. Trong C++, nó không cần thiết, nhưng một số người (bản thân tôi đã bao gồm) thích đặt nó vào, trên cơ sở nói những gì chúng tôi muốn nói. Và tất nhiên, nếu tiêu đề được sử dụng trong C là tốt, nó là cần thiết (nhưng đối với nhiều công dụng trong C, bạn sẽ cần một #define).

1

Trong C++, không cần thiết (dự phòng) để có từ khóa tĩnh để ngăn chặn liên kết toàn cầu, vì const thực hiện điều này cho tiêu chuẩn C++ (C++ 98, C++ 03, C++ 11). Tuy nhiên, trong C, từ khóa tĩnh là cần thiết cho một biến có liên kết cục bộ (file). Vì nhiều thực hành mã hóa C đã được đưa vào C++ theo thói quen (có rất nhiều sự trùng lặp), một số người có thể mang thói quen này mà không suy nghĩ. Tôi đã nghe nó lập luận rằng từ khóa tĩnh dự phòng trong C++ để chỉ ra liên kết phi toàn cầu giúp các lập trình viên C hiểu được. Bản thân tôi thích độ chính xác của lập trình trong C++ với thành ngữ C++, do đó chúng tôi không duy trì mã C trong C++, có thể dẫn đến lỗi tinh tế hoặc ít nhất là lãng phí và mã dự phòng (chẳng hạn như kiểm tra thói quen cho NULL trước khi gọi xóa trên con trỏ