Chương trình sau đây biên dịch tốt và hoạt động như mong đợi. sản lượng của nó là:Quá tải, hàm VARD và kiểu bool
1
2
#include <stdio.h>
class Foo
{
public:
void Bar(const char* b, ...) { printf("1\n"); };
void Bar(int a, const char* b, ...) { printf("2\n"); };
};
int main()
{
Foo foo1;
foo1.Bar("Test", "xx", 1, 2);
foo1.Bar(1, "xx", "xx", 2, 2);
}
Bây giờ nếu tôi thay đổi int
tham số của thứ hai Bar
hàm thành bool
và foo1.Bar(1, "xx", "xx", 2, 2);
vào foo1.Bar(true, "xx", "xx", 2, 2);
, sau đó dòng sau sẽ không biên dịch và tôi nhận được lỗi: 'Foo::Bar': 2 overloads have similar conversions
:
foo1.Bar("Test", "xx", 1, 2);
toàn bộ chương trình mà không biên dịch:
#include <stdio.h>
class Foo
{
public:
void Bar(const char* b, ...) { printf("1\n"); };
void Bar(bool a, const char* b, ...) { printf("2\n"); };
};
int main()
{
Foo foo1;
foo1.Bar("Test", "xx", 1, 2); // error: 'Foo::Bar': 2 overloads have similar conversions
foo1.Bar(true, "xx", "xx", 2, 2);
}
Tôi không hiểu tại sao có sự mơ hồ trong trường hợp thứ hai.
EDIT
Nhưng nếu con trỏ ngầm chuyển đổi sang bool
, tại sao sau đây biên dịch?
#include <stdio.h>
class Foo
{
public:
void Bar(const char* b) { printf("1\n"); };
void Bar(bool a) { printf("2\n"); };
};
int main()
{
Foo foo1;
foo1.Bar("Test");
foo1.Bar(true);
}
Câu hỏi tương tự http://stackoverflow.com/questions/26413951/overloaded-bool-string-ambiguity – robor78
Điều này không liên quan gì đến hàm variadic, mà bạn đã phát hiện ra rằng bạn đã xây dựng một testcase _minimal_. –
@LightnessRacesinOrbit Tôi vừa chỉnh sửa câu hỏi và thêm một trường hợp kiểm tra tối thiểu mà không có hàm variadic biên dịch ... –