xem xét:C++ 11 nhà điều hành "" với tham số đôi
struct str {};
str operator"" _X(long double d) {
return str();
}
này biên dịch tốt với g ++ 4.7.2 Tường std = C++ 11
nhưng bây giờ nếu tôi đưa ra một đôi:
str operator"" _X(double d) {
return str();
}
tôi nhận được thông báo lỗi sau: main.cpp | 3 | lỗi: 'điều hành str "" _x (double)' có danh sách đối số không hợp lệ
Vấn đề là gì? Có điều gì đó liên quan đến "Không thể xác định lại ý nghĩa của hậu tố chữ" (Stroustrup FAQ)? Bạn có thể nghĩ ra cách giải quyết không?
Ok cảm ơn. Nhưng tại sao ? Ý tôi là, có điều gì đó trong cú pháp ngăn cản không thể tăng gấp đôi? –
@ BérengerBerthoul: Tại sao bạn lại sử dụng 'double' khi 'long double' có nhiều hoặc nhiều độ chính xác? Có lẽ vì lý do tốc độ hoặc sử dụng bộ nhớ, phải không? Vâng, đó không phải là những cân nhắc cho các hoạt động được thực hiện tại thời gian biên dịch. Nếu bạn muốn thực hiện các phép toán với độ chính xác gấp đôi, bạn luôn có thể sử dụng một phép đúc bên trong hàm. –
@Ben Voigt Ok, tốt cho tôi. Tôi chỉ nghĩ rằng đó là một chút kludge, nhưng thực sự không có pb lớn. Cảm ơn –