【发布时间】:2012-03-22 06:19:07
【问题描述】:
如果我没记错的话,这种声明可以用于在构造函数中分配默认值:
/* .h */
class FooClass(){
private:
int* data;
int depth, rows, columns;
char* desc;
public:
...
}
/* .cpp */
FooClass::FooClass()
: data(NULL), depth(0), rows(0), columns(0), desc(NULL)
{
//whatever constructor does...
}
但不允许为函数中的参数分配默认值:
不行
/* .h */
class FooClass(){
public:
void foofunc(int var1, int var2, int var3, int var4);
}
/* .cpp */
FooClass::foofunc(int var1, int var2)
: var3(0), var4(5)
{
//whatever function does...
}
必须改为这样:
好的
/* .h */
class FooClass(){
public:
void foofunc(int var1, int var2, int var3 = 0, int var4 = 5);
}
/* .cpp */
FooClass::foofunc(int var1, int var2, int var3, int var4)
{
//whatever function does...
}
为什么?
【问题讨论】:
-
你为什么投票赞成关闭?
-
您的第二个和第三个示例均无效,因为声明和定义不匹配。如果您设置了相同数量的参数,那么任何一种方式都有效。
-
@peachykeen 首先第三个例子没问题,我犯了复制/粘贴错误,但回答的人理解我的意思。第二件事,如果在我的第二个示例中(标记为不正确,因为我知道它不正确)我输入了相同数量的参数,但由于我与构造函数中的初始化列表。在问题中犯错误不应该是投票结束它的好理由。
-
出于这个原因,我从未提及您的第一个示例。你的第二个,使用正确的参数,会工作。投票不是我的,尽管我已经投票结束,因为这个问题没有显示出任何研究工作;一半的代码甚至不是模糊有效的,但这不是因为手头的问题,而是因为函数的编写方式不正确,参数如何工作。
-
@peachykeen 我想知道您如何判断努力,但我仍然认为这可能是拒绝投票的一个很好的理由,而不是结束一个问题。
标签: c++ default-value function-parameter