C ++ primer 5th关于func参数

时间:2016-11-03 10:52:21

标签: c++ c++11

它的问题是“将make_plural的第二个参数(第6.3.2节,第224页)作为's'的默认参数。通过打印单词和复数形式的单词成功和失败来测试你的程序” 这是make_plural。

string make_plural(size_t ctr, const string& word, const string& ending )
{
    return (ctr > 1) ? word + ending : word;
}

这是否意味着改变'结束',但结束是第三个参数,不是吗? 这个问题让我很烦恼! 此致!

1 个答案:

答案 0 :(得分:1)

那一定是个错字。

查看代码:

string make_plural(size_t ctr, const string& word, const string& ending )
{
    return (ctr > 1) ? word + ending : word;
}

最合理的是拥有" s"作为ending的默认值,因为这是默认情况下复数的制作方式(并非总是如此,但使用" bee" - >"蜜蜂"例如它有效)。

一个更强大的论点是,在C ++中,如果(n + 1)-th没有默认参数,则不可能(除非你找到一个神奇的解决方法(*))为第n个参数设置一个默认参数:

foo(int first = 0,int second) // not possible !!

通过这个例子,可能不太清楚为什么不允许这样做,但考虑有多个默认值。让我们说你会写:

foo(int first = 0,int second,int third = 0); // actually still not allowed

然后就没有办法知道是否

foo(1,2);

应该打电话

foo(0,1,2); 

foo(1,2,0);

要解决这种歧义,必须发明一些规则,对于C ++,规则是必须从右到左提供默认参数。

(*)如果您可以更改该功能并愿意编写一些额外的代码,则解决方法相当简单。您只需将所有参数封装在一个结构中,该结构可以使用您喜欢的任何默认组合来创建参数。