Khi sử dụng biến thể double
của hàm std::abs()
mà không có std
với g ++ 4.6.1, không có cảnh báo hoặc lỗi nào được đưa ra.Tránh các vấn đề về trình biên dịch với abs()
#include <algorithm>
#include <cmath>
double foobar(double a)
{
return abs(a);
}
Phiên bản này của g ++ dường như được kéo trong double
biến thể của abs()
vào không gian tên toàn cầu thông qua một trong những bao gồm từ algorithm
. Điều này có vẻ như bây giờ được cho phép theo tiêu chuẩn (xem này question), nhưng không bắt buộc.
Nếu tôi biên dịch mã trên sử dụng một trình biên dịch mà không kéo double
biến thể của abs()
vào không gian tên toàn cầu (như g ++ 4.2), sau đó các lỗi sau đây được báo cáo:
warning: passing 'double' for argument 1 to 'int abs(int)'
Làm thế nào tôi có thể force g ++ 4.6.1 và các trình biên dịch khác có chức năng kéo vào không gian tên chung, để đưa ra cảnh báo để tôi có thể ngăn lỗi khi được sử dụng với các trình biên dịch khác?
Có gì sai khi sử dụng 'std :: abs' nếu đó là hàm bạn cần? –
@JonathanLeffler Không có gì, nhưng có thể dễ dàng bỏ sót do nhầm lẫn. Tôi không muốn trượt đi mà không bị phát hiện và gây ra các vấn đề biên dịch với các trình biên dịch khác. –