c++默认参数有关问题

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, "", "")