在C语言中,当调用的函数没有原型时,编译器执行默认参数升级。默认参数促销何时发生?
但是C++怎么样?默认参数促销何时会发生?
在C++ 11标准5.2.2/7:
当存在对于给定的参数没有参数,该参数是 以这样的方式使得接收功能能够获得值传递 通过调用va_arg(18.10)的论点。 [注意:此段 不适用于传递给函数参数包的参数。 函数参数包在模板实例化 (14.5.3)期间展开,因此实际调用功能模板专用化时,每个此类参数都有相应的参数。结束符 参数表达式执行了左值到右值(4.1),数组到指针(4.2)和 函数到指针(4.3)的标准转换。具有(可能是cv合格)类型 std :: nullptr_t的参数被转换为void *(4.10)类型。在这些 转换之后,如果参数没有算术,枚举,指针,成员指针或类类型,则该程序是格式不正确的。 传递具有非平凡复制构造函数,非平凡移动构造函数, 或非平凡析构函数,并且没有相应参数的类类型(第9章) 的潜在评估参数是 有条件地支持实现定义语义。如果参数 的整数或枚举类型受 积分促销(4.5)或浮点类型( )影响的浮点促销(4.6),则参数的值为 转换为促销在通话之前键入。这些促销活动是 ,被称为默认参数促销活动。
该段落仍未指定默认参数提升何时发生。没有明确的逻辑,这一段可能会说得太多。我努力概述逻辑但失败了。我不熟悉调用va_arg的。
希望你能帮助我。