在 C++ 中使用默认参数调用函数

Posted

技术标签:

【中文标题】在 C++ 中使用默认参数调用函数【英文标题】:calling a function in C++ with default arguments 【发布时间】:2012-11-20 17:56:53 【问题描述】:

我有一个函数Func(string str,int*i=NULL,int*j=NULL,bool ok=false); 我称它为Func(some_string,false);

程序崩溃了..因为我用--调用的顺序错误??

【问题讨论】:

是的,你只能在参数列表的末尾省略参数,不能在中间。 发布代码,包括调用,以及您所说的“崩溃”的描述。 如果这真的编译,它只是用false 初始化i,这显然会以某种方式转换为空指针值。你的功能是否像Func(some_string)一样工作? @Angew:确实如此。任何等于零的整数常量表达式都将转换为空指针。 false 是整数、常数且等于 0,因此满足所有条件。 @MSalters 我不了解 C++03,但在 C++11 [conv.ptr]p1 中:“A 空指针常量 是一个整数常量整数类型 的表达式 (5.19) prvalue,其计算结果为零或 ...”(强调我的)。 bool 是整数,但不是整数类型 【参考方案1】:

如果您希望为ok 指定一个值,您还必须为其前面的所有参数指定值。

【讨论】:

【参考方案2】:

是的。第二个参数需要一个 int 值,而您正在传递一个 bool 值。第 3 和第 4 个参数分别取 NULL 和 false。

【讨论】:

以上是关于在 C++ 中使用默认参数调用函数的主要内容,如果未能解决你的问题,请参考以下文章

调用 C++ 函数时指定默认参数

C++

C++函数默认值与函数重载

默认参数与函数重载

函数参数的扩展

C++中复制构造函数被调用的三种情况