2013-02-07 16 views

Trả lời

30

Tiện ích có chức năng tĩnh trong tệp là gì?

Bạn có thể sử dụng các chức năng này để cung cấp logic triển khai được chia sẻ cho các chức năng khác trong cùng một tệp. Các hàm trợ giúp khác nhau cụ thể cho một tệp là các ứng cử viên tốt được khai báo là tệp tĩnh.

Chúng khác với chức năng toàn cục trong tệp như thế nào?

Chúng ẩn với trình liên kết, cho phép các đơn vị biên dịch khác định nghĩa các hàm có cùng chữ ký. Việc sử dụng các không gian tên làm giảm bớt vấn đề này ở mức độ lớn, nhưng các hàm-static trước các không gian tên, bởi vì chúng là một tính năng được kế thừa từ ngôn ngữ lập trình C.

+0

Mọi thứ trở nên rõ ràng với tôi khi tôi đọc rằng các chức năng toàn cầu được mặc định bên ngoài, đó là "void fun() {}" giống với "extern void fun() {}" ... vẫn còn, nếu bạn không đặt chúng vào một tiêu đề, chúng chỉ có thể được sử dụng trong tệp triển khai mà chúng được định nghĩa (bên dưới điểm mà chúng được định nghĩa). –

+2

@Simon Knapp chúng có thể được sử dụng trong các đơn vị chuyển đổi khác nhau bằng cách sử dụng một mẫu thử nghiệm. –

10

Một chức năng static chỉ đơn giản có nghĩa là mối liên kết không thể xuất hiện chức năng (ví dụ: làm cho nó có thể nhìn thấy translation units khác). Nó làm cho hàm "riêng tư" thành đơn vị dịch hiện tại. Nó giống như gói hàm trong một không gian tên ẩn danh.

namespace { 

    int Square(int i) 
    { 
     return i * i; 
    } 

} 

Nói chung, sử dụng không gian tên ẩn danh là cách C++ ưu tiên để đạt được điều này, thay vì sử dụng từ khóa static.

+2

Tại sao nó được ưa thích? Nó có vẻ tiết tú hơn với tôi. – rozina

3

Chức năng tĩnh hiển thị trên tệp mà chúng chỉ được xác định. Bạn không thể tham chiếu chúng bên ngoài tệp cụ thể đó.

Read more here

2

Trong một từ, liên kết. Các hàm static có liên kết nội bộ, nghĩa là chúng không hiển thị bên ngoài đơn vị dịch của chúng.