使用默认参数健康习惯还是不良参数
Is usage of Default parameters healthy habit or a bad one?
我们什么时候应该使用默认参数?什么是适当的语法,不应该在哪里使用?定期使用它们是好习惯还是坏习惯?它们会影响效率吗?
唯一的情况,我才能想到它影响效率的位置是当您包含大的默认参数,但没有任何呼叫者使用。例如:
#include <iostream>
void foo(std::ostream& out=std::cout) {
out << "foo";
}
如果呼叫者都不使用默认参数,并且程序的其余部分不需要<iostream>
,则它将徒劳地包含在内,从而增加了可执行的大小(并且汇编时间可能或可能无关紧要)。
可以在任何C 参考中找到适当的语法,例如http://msdn.microsoft.com/en-us/library/91563f79.aspx。他们永远不应产生任何效率的影响。至于用法提示,与其他所有内容一样,它取决于特定情况。他们可能会使事情清除或更复杂。还有一件值得一提的一件事 - 一个应该谨慎使用虚拟函数中的默认参数,因为它们的值是根据静态类型解决的,这可能是出乎意料的。
参数的默认值仅在 neclaration 的中指定,例如:
void fun(int value = 0);
请注意,只有参数列表中的最终参数可能具有默认值。例如。禁止以下内容:
void fun(int v1 = 0, int v2);
当函数在其他地方定义时,必须省略默认值。
void fun(int value)
{
cout << value << 'n'; // will print 0 when nothing was passed by the user
}
他们做不是以任何方式具有runtime-Over头,因为当用户未指定它时,编译器会将此值添加到函数call中。仅当某个默认行为直观时才使用它们。
有时可以用作功能过载的替代方案。上面的示例的效果也可以通过
来实现void fun();
void fun(int value);
这意味着您必须两次实现fun
(其中fun()
仅调用fun(0)
)。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- OPENCV错误:不良的参数(字节必须为16、32或64)在简介Descriptorextractorimpl中
- 限制C++中允许的模板参数是否被认为是不良样式?
- 我需要输入课程的参数,我应该在哪里做?同样,为什么COUT被认为是在课堂上使用的不良实践
- 使用默认参数健康习惯还是不良参数
- 在模板类 T> 的函数中使用指向类 T 成员的函数指针作为参数的不良做法
- 是带有参数的非纯虚拟函数的不良做法