Có thể ai đó vui lòng giải thích cho tôi tại sao trong đoạn mã sau tôi nhận được một cuộc gọi mơ hồ đến các nhà thầu bị quá tải trong Foo nếu tôi cố gắng khởi tạo MyFooC? Giả định của tôi là số nguyên được sử dụng như một tham số constructor sẽ được đẩy lên một int không dấu và đã được giải quyết nhưng điều này rõ ràng là không chính xác.Sự mơ hồ giữa các nhà xây dựng quá tải
template <typename t> class Foo
{
private:
t m_Value;
unsigned int m_Length;
public:
Foo(const t& Value) :
m_Value(Value),
m_Length(0)
{
}
Foo(unsigned int Length) :
m_Value(static_cast<t>(0)),
m_Length(Length)
{
}
};
int main()
{
Foo<double> MyFooA(32U);
Foo<double> MyFooB(32.0f);
//Foo<double> MyFooC(32);
return 0;
}
"Quảng cáo" được ưu tiên là "chuyển đổi", do đó, với một 'char', một hàm lấy' int' sẽ được ưu tiên là một tham số 'double'. Nhưng tiêu chuẩn C++ sử dụng định nghĩa rất hạn chế về "khuyến mãi"; về cơ bản, quảng cáo là một chuyển đổi sẽ diễn ra trong một toán tử nhị phân trong đó cả hai toán hạng đều có cùng loại. (Ví dụ, nếu bạn thêm hai 'short', cả hai được nâng lên' int' trước phần bổ sung.) –
Ahh, tôi không biết điều đó, cảm ơn bạn. – Jodaka