2013-04-19 25 views
7

Có sự khác biệt giữavị trí của * tĩnh * từ khóa trong khai báo method viên

class C { 
    static int func(); 
}; 

class C { 
    int static func(); 
}; 

Tôi đang cố gắng để loại bỏ các từ khóa tĩnh trong người khác của mã căn cứ. Và tôi muốn chắc chắn rằng tôi hiểu ví dụ thứ hai có ý nghĩa gì trước khi tôi làm điều đó.

[Chỉnh sửa] Lý do xóa tĩnh: C là "lớp" không có biến thành viên và đầy đủ các phương pháp tĩnh. Tôi nghĩ rằng nó là thích hợp hơn để làm cho "C" một không gian tên với các chức năng bình thường thay vì một lớp học.

+2

Tại sao bạn đang cố xóa nó? –

+1

Vì C là một "lớp" không có biến thành viên và đầy đủ các phương thức tĩnh. Tôi nghĩ rằng nó là thích hợp hơn để làm cho "C" một không gian tên thay vì một lớp học. Tôi có đúng không? – GuLearn

+0

Đó thực sự là cách tiếp cận thành ngữ C++. Bộ lập trình ban đầu có thể là một nhà phát triển Java (họ không có 'không gian tên'). – MSalters

Trả lời

10

Không có sự khác biệt. static trên khai báo hàm áp dụng cho hàm.
Một con trỏ this sẽ không được chuyển hoàn toàn đến hàm này, Vì vậy, bạn không thể truy cập các thành viên lớp không tĩnh bên trong hàm này mà không truyền đối tượng đó một cách rõ ràng.

Để xóa static trước tiên, bạn nên biết và hiểu mục đích được thiết kế theo cách này. Nếu không tham gia vào đó để xem xét bạn chỉ là ràng buộc để tạo ra một mùi mã của tỷ lệ rộng lớn.

+0

Có sự khác biệt nào giữa 'static int i' vs' int static i'? –

+0

Vui lòng xem bình luận của tôi dưới câu hỏi. Tôi nghĩ rằng tôi đang làm điều đúng – GuLearn

+1

@RasmiRanjanNayak: Không, ngoài việc gây nhầm lẫn cho người sẽ duy trì nó. –

3

Có, trong trường hợp đầu tiên, từ khóa static xuất hiện trước loại int, thứ hai, chúng là cách khác. Tuy nhiên, giống như nhiều thứ trong C và C++, không có sự khác biệt ngữ nghĩa. Vì vậy, ngoài "cosmetically", không có sự khác biệt.

Tôi không chắc chắn lý do tại sao bạn muốn xóa static trong lớp học dưới dạng quy tắc chung - có thể có lý do chính đáng mà chức năng thành viên được khai báo là static.

+4

Vì vậy, câu trả lời của bạn cho "Có sự khác biệt?" là có."? –

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