2010-10-20 31 views
7

Nếu một hàm thành viên được xác định bên trong lớp, nó là một hàm nội tuyến. Ví dụ.Chức năng của bạn có được xác định tự động trong lớp không?

struct X 
{ 
    void mem_f() {} //mem_f is inline 
}; 

Câu hỏi của tôi là liệu một hàm bạn bè chưa được xác định trong lớp cũng tự động nội tuyến hay không.

Ví dụ:

struct Y 
{ 
    friend void friend_f() {} //is friend_f inline? 
}; 

Trích dẫn/đoạn liên quan từ tiêu chuẩn sẽ được hoan nghênh nhiều. Cảm ơn.

Trả lời

13

Vâng, đúng vậy. §11.4/5:

Một chức năng có thể được định nghĩa trong một tuyên bố người bạn của một lớp khi và chỉ khi lớp là một lớp không địa phương (9,8), tên hàm là không đủ tiêu chuẩn, và hàm có phạm vi không gian tên. Hàm như vậy là hoàn toàn nội tuyến. Một hàm bạn được xác định trong một lớp nằm trong phạm vi (từ vựng) là lớp mà nó được xác định. Hàm bạn bè được xác định bên ngoài lớp không phải là (3.4.1).

Vì định nghĩa lớp có lẽ nằm trong tệp tiêu đề, hàm sẽ được định nghĩa nhân, vì vậy cần phải là inline.

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