2012-01-20 48 views
5

Nếu bạn tạo một biến tĩnh cục bộ bên trong một phương thức, được khởi tạo một lần cho mỗi cá thể, hoặc một lần cho mỗi chương trình?biến tĩnh trong phương thức gọi

Điều này có khác biệt giữa C++ và Objective-C không?

Trả lời

6

Nếu bạn tạo biến tĩnh cục bộ bên trong một phương thức, được khởi tạo một lần cho mỗi trường hợp hoặc một lần cho mỗi chương trình?

Một lần cho mỗi chương trình.

Ngay cả khi nó nằm trong một hàm thành viên lớp không tĩnh, nó không được liên kết với bất kỳ cá thể lớp nào; sẽ chỉ có một phiên bản của biến trong toàn bộ chương trình, được khởi tạo chỉ một lần.

Điều này có khác biệt giữa C++ và Objective-C không?

Trong C++, nó được khởi tạo lần đầu tiên hàm được gọi. Trong C (và Objective-C), nó được khởi tạo trước khi khởi động chương trình. Trong thực tế, điều này không tạo ra sự khác biệt, vì việc khởi tạo không thể có bất kỳ tác dụng phụ nào trong C.

1

Được khởi tạo một lần cho mỗi chương trình.

Nó không thay đổi từ phương pháp ObjC++ sang ObjC.

Nó có thể thay đổi nếu nó là C - một hàm C có thể sao chép dữ liệu tĩnh nếu (ví dụ) hàm này là một hàm nội dòng tĩnh. Vì vậy, bạn có thể kết thúc với các biến tĩnh dự phòng.

Với C++, một lần cho mỗi chương trình. Bên trong một phương thức hoặc hàm C được xuất, nó là một lần cho mỗi chương trình.

3

Mục tiêu-C không khác với C theo khía cạnh đó, do đó, biến tĩnh cục bộ bên trong một phương thức được khởi tạo chỉ một lần trong suốt thời gian tồn tại của chương trình.

Bạn cũng có thể xem this S.O. post, có thể giúp bạn sử dụng biến tĩnh trong Obj-C.

0

Trong C++, nó được khởi tạo tối đa một lần cho mỗi chương trình; initialisation xảy ra khi phương thức được thực thi đầu tiên. (Cụ thể là khi tuyên bố được thực hiện.)

0

Bạn không có trường hợp phương pháp nào cả (ít nhất là không có nghĩa là bạn có thể tạo nhiều hơn).

Độ phức tạp của trình liên kết Modulo, bạn nhận được một bản sao của từng phương pháp và một bản sao của mỗi biến tĩnh bất kỳ.

6

Hãy lưu ý rằng trong C++ nếu lớp hoặc phương thức của bạn là "templated" thì biến tĩnh riêng sẽ được tạo cho mỗi bản mẫu. Ví dụ. sử dụng ba kiểu tham số mẫu khác nhau dẫn đến ba biến tĩnh khác nhau.

Các vấn đề liên quan