Đẩy trách nhiệm kiểm tra và tìm hàm phù hợp cho compiler!

Một phần của tài liệu Hàm và thư viện (Trang 46 - 49)

Ơ

N

Mt s qui tc v np chng tên hàm

ƒ Các hàm cùng tên ₫ược ₫ịnh nghĩa cùng trong

mt file/ trong mt thư vin hoặc s dng trong

cùng mt chương trình phải khác nhau ít nhất về:

— Số lượng các tham số, hoặc

— Kiểu của ít nhất một tham số (int khác short, const int

khác int, int khác int&, ...)

 Không thể chỉ khác nhau ở kiểu trả về

ƒ Tại sao vậy?

— Compiler cần có cơ sở ₫ể quyết ₫ịnh gọi hàm nào

— Dựa vào cú pháp trong lời gọi (số lượng và kiểu các tham số

thực tế) compiler sẽ chọn hàm có cú pháp phù hợp nhất

— Khi cần compiler có thể tự ₫ộng chuyển ₫ổi kiểu theo chiều hướng hợp lý nhất (vd short=>int, int => double)

Ơ

N

3.8 Hàm inline trong C++

ƒ Vấn ₫ề: Hàm tiện dụng, nhưng nhiều khi hiệu suất không cao,

₫ặc biệt khi mã thực thi hàm ngắn

— Các thủ tục như nhớ lại trạng thái chương trình, cấp phát bộ nhớ ngăn xếp, sao chép tham số, sao chép giá trị trả về, khôi phục trạng thái chương trình mất nhiều thời gian

— Nếu mã thực thi hàm ngắn thì sự tiện dụng không bõ so với sự

lãng phí thời gian

ƒ Giải pháp trong C: Sử dụng macro, ví dụ

#define max(a,b) a>b?a:b

— Vấn ₫ề: Macro do tiền xử lý chạy (preprocessor), không có kiểm tra kiểu, không có phân biệt ngữ cảnh => gây ra các hiệu ứng phụ

không mong muốn

Ví dụ dòng lệnh l=max(k*5-2,l);

sẽ ₫ược thay thế bằng l=k*5-2>k?k*5-2:l; // OOPS!

— Những cách giải quyết như thêm dấu ngoặc chỉ làm mã khó ₫ọc, không khắc phục triệt ₫ể các nhược ₫iểm

Ơ

N

Gii pháp hàm inline trong C++

Một phần của tài liệu Hàm và thư viện (Trang 46 - 49)

Tải bản đầy đủ (PDF)

(51 trang)