c++入门第5章关于函数参数
C++primer 5th about func parameter
它的问题是"给make_复数的第二个形参(第6.3.2节)一个默认实参's'。通过打印单词success和failure的单数和复数版本来测试你的程序。这是make_复数
string make_plural(size_t ctr, const string& word, const string& ending )
{
return (ctr > 1) ? word + ending : word;
}
这是否意味着改变'ending',但ending是第三个参数,不是吗?这个问题让我很担心!的问候!
一定是打错了。
查看代码:
string make_plural(size_t ctr, const string& word, const string& ending )
{
return (ctr > 1) ? word + ending : word;
}
最合理的事情是将"s"作为ending
的默认值,因为这是默认复数的方式(并不总是,但使用"bee"->"bees",例如它有效)。
一个更强的参数是,在c++中,如果(n+1)第n个参数没有默认参数,则不可能(除非你找到一个神奇的变通方法(*))为第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++来说,规则是必须从右到左提供默认参数。
(*)如果您可以更改函数并愿意编写一些额外的代码,则解决方法相当简单。您只需要将所有参数封装在一个结构体中,该结构体提供以您喜欢的默认值组合创建参数。
相关文章:
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 当从函数参数中的临时值调用复制构造函数时
- 如何从"decltype()"获取函数参数的数量<funtion>?
- 如何将lambda作为模板类的成员函数参数
- 模板参数推导失败,函数参数/参数不匹配
- 如何在C++中将迭代器作为函数参数传递
- 将函数参数"const char*"转换为"std::string_view"是
- C++ 如何将数组值解压缩为函数参数
- 主函数参数的属性
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 如何定义在用作函数参数时工作的类模板的转换
- 将函数参数完美转发到函数指针:按值传递呢?
- 为什么我不能将引用作为 std::async 的函数参数传递
- 什么..(省略号)作为函数原型中唯一的函数参数,C++?
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 接受模板作为函数参数
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- Arduino 函数参数