2012-02-11 7 views
13

Tôi có một chức năng thành viên tĩnh mà chỉ đơn thuần là cú pháp đường cho tôi và tôi muốn cơ thể của nó xuất hiện thay cho chuyển động của các tham số truyền vào nó. SẽBạn có thể nội tuyến các hàm thành viên tĩnh không?

inline static foo(int a) {return a & 0x00000040;} 

được inline giống như khi nó là inline mà không bị static?

+1

Như với bất kỳ nội tuyến nào, câu trả lời là "nó phụ thuộc". Điều gì sẽ xảy ra nếu bạn muốn chuyển một con trỏ hàm tới 'foo' ở đâu đó? –

Trả lời

13

Trình biên dịch chọn những gì nó muốn làm như vậy chúng tôi không thể nói những gì nó sẽ chọn để làm. Điều đó nói rằng, chức năng là static sẽ không ngăn chặn nó được inlined; Các hàm static về cơ bản là các chức năng miễn phí với kiểu đặt tên khác và quyền truy cập vào các thành viên riêng của lớp.

+0

Chúng khác với các chức năng miễn phí trong một sự tôn trọng quan trọng: quyền truy cập vào các thành viên riêng – John

+0

@ John ah vâng, đó là một sự khác biệt quan trọng. –

+0

Không phải định nghĩa bên trong lớp có ngụ ý yêu cầu nội tuyến không? –

0

Phương pháp thành viên tĩnh không có tham số this và do đó chỉ có thể truy cập các biến thành viên tĩnh.

Điều này khác biệt với việc liệu phương pháp có được gạch chân hay không. Vì vậy, hai là độc lập với nhau.

Trình biên dịch quyết định xem một phương pháp sẽ được inlined hay không. Việc bạn sử dụng từ khóa chỉ là một gợi ý cho trình biên dịch.