Tôi thường chạy vào các lớp lớn, không phải mẫu trong C++, nơi các phương thức đơn giản được xác định trực tiếp trong phần thân của lớp trong tệp tiêu đề thay vì riêng trong tệp triển khai. Ví dụ:Tại sao các phương thức C++ đôi khi được định nghĩa bên trong các lớp?
class Foo {
int getBar() const { return bar; }
...
};
Tại sao phải làm như vậy? Có vẻ như có những bất lợi. Việc thực hiện không phải là ẩn như nó phải được, mã là ít có thể đọc được, và cũng sẽ có một gánh nặng gia tăng trên trình biên dịch nếu tập tin tiêu đề của lớp được bao gồm trong nhiều nơi khác nhau.
Đoán của tôi là mọi người có ý định cho các chức năng này được gạch chân trong các mô-đun khác, điều này có thể cải thiện hiệu suất đáng kể. Tuy nhiên, tôi đã nghe các trình biên dịch mới hơn có thể làm nội tuyến (và các tối ưu hóa xen kẽ khác) tại thời gian liên kết trên các mô-đun. Mức độ hỗ trợ cho loại tối ưu hóa liên kết thời gian này là bao nhiêu và nó có thực sự làm cho các định nghĩa này không cần thiết không? Có bất kỳ lý do chính đáng nào khác cho các định nghĩa này không?
Có, nhưng "nội tuyến theo mặc định" không có nghĩa là trình biên dịch sẽ nội tuyến chúng, chỉ rằng bạn không tự phải thêm gợi ý * mà từ khóa "nội tuyến" thực sự là. –