在 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++ 中使用默认参数调用函数的主要内容,如果未能解决你的问题,请参考以下文章