2012-04-02 37 views
5

xem xét như sau:thông số mặc định trong C++

int foo(int x , int z = 0); 
int foo(int x, int y , int z = 0); 

Nếu tôi gọi hàm này như sau:

foo(1 , 2); 

Làm thế nào để trình biên dịch biết cái nào để sử dụng không?

Trả lời

8

Nó sẽ không và do đó ví dụ này sẽ không biên dịch một cách rõ ràng, nó sẽ cung cấp cho bạn một lỗi biên dịch.
Nó sẽ cung cấp cho bạn một lỗi cuộc gọi hàm mơ hồ.

Online Sample:

int foo(int x , int z = 0){return 0;} 
int foo(int x, int y , int z = 0){return 10;} 

int main() 
{ 
    foo(1 , 2); 
    return 0; 
} 

Output:

prog.cpp: In function ‘int main()’:
prog.cpp:6: error: call of overloaded ‘foo(int, int)’ is ambiguous
prog.cpp:1: note: candidates are: int foo(int, int)
prog.cpp:2: note: int foo(int, int, int)

5

Không, đó là lý do bạn gặp lỗi trình biên dịch.

2

trình biên dịch sẽ báo cáo nhập nhằng chức năng quá tải. Vì bạn không thể tìm ra hàm nào sẽ được gọi là trình biên dịch

4

Đó là một câu hỏi hay. Nhưng nó sẽ không biên dịch vì lời gọi phi thường đến foo(). Bạn có thể loại bỏ sự mơ hồ này bằng cách sử dụng các kiểu dữ liệu khác nhau trong chữ ký hàm.

Để cụ thể hơn về tham số mặc địnhchức năng quá tải thấy http://www.smart2help.com/e-books/ticpp-2nd-ed-vol-one/Chapter07.html

Các vấn đề liên quan