Có cách nào để chỉ ra trình biên dịch mà bạn biết giá trị của một biến cụ thể phải nằm trong một phạm vi cụ thể tại một điểm nhất định trong mã, để hỗ trợ trình biên dịch có tối ưu hóa không? Tôi đang viết một thư viện mà làm cho nó có thể biết phạm vi của một số biến tại thời gian biên dịch, và nó sẽ được thuận tiện nếu nó bằng cách nào đó có thể truyền đạt thông tin này đến trình biên dịch để trình biên dịch có thể sử dụng nó để tối ưu hóa. Tôi muốn thêm hỗ trợ cho bất kỳ trình biên dịch nào mà nó sẽ hoạt động ngay cả khi nó không thể được thực hiện để làm việc cho tất cả chúng (có vẻ như một số thứ mà một số trình biên dịch có thể mở rộng, nhưng tôi chưa tìm thấy bất kỳ). Tôi biết tôi có thể viết một cái gì đó như thế này:Làm cách nào để truyền thông tin phạm vi tới trình biên dịch C++?
if(x < COMPILE_TIME_MIN or x > COMPILE_TIME_MAX)
return;
// compiler will assume for code below that x is in range COMPILE_TIME_MIN..COMPILE_TIME_MAX
Nhưng đó là kiểm tra thời gian chạy. Có lẽ có một số mẹo để làm cho trình biên dịch đưa ra giả định về phạm vi mà không cần kiểm tra này?
Bạn có bất kỳ suy nghĩ nào về loại tối ưu hóa này sẽ giúp ích gì không? –
Nếu bạn sử dụng mẫu, bạn thực sự có thể thực hiện kiểm tra thời gian biên dịch nếu tất cả thông tin của bạn được biết đến lúc biên dịch. –
Bạn đang sử dụng cụm từ "trình biên dịch", nhưng bạn không bao giờ cho chúng tôi biết cái nào. Có lẽ bạn có nghĩa là một số phiên bản của g ++ hoặc Visual C++, nhưng điều đó không rõ ràng. Tối ưu hóa nói chung không được giải quyết bởi các tiêu chuẩn, vì vậy bất cứ điều gì bạn có thể có thể làm ở đây là thực hiện cụ thể. –