C++ 函数重复声明时,添加默认实参问题。

在原书《C++ Primer 5th》中(P212),如下写到:在原有默认值的下,添加其他默认值是正确的声明。
图片说明


但是在测试时,编译器(vs2015)却报错了。
图片说明


执行程序时,可以正确执行,但是还是会输出这个错误。

void screen(int w, int h, string s) { cout << (w * h) << " " + s; }

void screen(int w, int h, string s = "stringgggg");

void screen(int w = 32, int h = 16, string s);

void main()
{
    screen();
}

输出结果:
512 stringgggg

请问为什么报错?怎么解决?

编译出错了 还能正确执行? 你这个是启动上一次成功的实例的结果吧,

因为你的默认实参位置写错了,默认实参必须先满足最右边的再依次往左走,第三个函数最右边的string必须写默认实参,因为它左边的都有实参了,右边的必须也要有,成功的话,忘采纳我的意见

默认实参位置写错了,函数传参顺序从右到左

这样应该没有错误。这个错误提示不是编译时输出的吧?是不是助手之类的提示错误?

你重载的最后一个screen()在string s后面再加一个默认

出现有红色下划线并不表示就一定是错误,主要还是看编译以后是不是报错

有没有人试一试?再告诉我是不是只有我的编译器(VS2015)是这样。

第三个函数的参数默认值不能这样给。 如果一个函数中有多个默认参数,则形参分布中,默认参数应从右至左逐渐定义。

图片说明真的能运行哦

我用devc++和vs2017都测试了下,都会显示添加参数那条没有把默认参数写在最右边,可能这个特性不是所有编译器都支持吧