在原书《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都测试了下,都会显示添加参数那条没有把默认参数写在最右边,可能这个特性不是所有编译器都支持吧