Câu trả lời ngắn gọn là có. Bất kỳ hàm nào cũng có thể được khai báo nội tuyến và việc đặt thân hàm trong định nghĩa lớp là một cách để thực hiện điều đó. Bạn cũng có thể thực hiện:
class Foo
{
int* p;
public:
Foo();
~Foo();
};
inline Foo::Foo()
{
p = new char[0x00100000];
}
inline Foo::~Foo()
{
delete [] p;
}
Tuy nhiên, tùy thuộc vào trình biên dịch nếu nó thực sự thực hiện chức năng. VC++ khá nhiều bỏ qua yêu cầu của bạn cho nội tuyến. Nó sẽ chỉ inline một chức năng nếu nó nghĩ rằng đó là một ý tưởng tốt. Các phiên bản gần đây của trình biên dịch cũng sẽ nội tuyến những thứ nằm trong các tệp .obj riêng biệt và không được khai báo nội tuyến (ví dụ: từ mã trong các tệp .cpp khác nhau) nếu bạn sử dụng link time code generation.
Bạn có thể sử dụng từ khóa __forceinline để cho trình biên dịch biết rằng bạn thực sự thực sự có ý nghĩa khi bạn nói "inline this function", nhưng nó không phải là giá trị của nó. Trong nhiều trường hợp, trình biên dịch thực sự không biết rõ nhất.
Đó không chỉ là gợi ý: nội tuyến cho phép bạn xác định cùng một chức năng trong nhiều đơn vị dịch. Đây là điều kiện tiên quyết để nội tuyến hóa chức năng tại một trang web gọi (không có tối ưu hóa thời gian liên kết), là nơi từ khóa nhận được tên của nó. –
@FredNurk i hoàn toàn đồng ý với bạn - Tuy nhiên Stroustrup mình (Thiết kế và tiến hóa của C++) tham chiếu đến 'inline' như là một 'gợi ý' cho trình biên dịch –
Như đã nói ở trên, câu trả lời này đã lỗi thời. [Ở đây] (https://stackoverflow.com/a/44247740/509868) là một câu trả lời cập nhật hơn cho một câu hỏi tương tự. – anatolyg