c++默认参数问题
- C/C++ code
#include <iostream>#include <string>using namespace std;/******* 书上说如果一个默认参数需要指定一个特定值,则在其之前的所有参数都必须赋值。***** 那样的话,像Display(s3) 等这个的赋值是不对的,但却能正确执行。****/void Display(string s1,string s2="",string s3="");int main(){ string s1 = "a",s2 = "b",s3 = "c"; Display(s1); Display(s1,s2,s3); Display(s3,s1); Display(s2,s3); Display(s3); Display(s2);}void Display(string s1,string s2,string s3){ if(s2 == "" && s3 == "") { cout << s1 << endl; } else if(s3 == "" && s2!= "") { cout << s1 << "," << s2 << endl; } else { cout << s1 << "," << s2 << "," << s3 << endl; }}
上面代码应该报错,却能正确执行?
我的环境是vs2008
[解决办法]
函数参数是从右往左这个顺序
lz 的代码没有问题
[解决办法]
display必须要有一个参数,这个不能少;后面的参数如果不赋值就用缺省的默认参数
[解决办法]
难道 lz 以为几个 s3 都是同一个不成
函数形参和实参是两回事
- C/C++ code
Display(s3); // 这个调用的是 Display(s3, "", "")