【问题标题】:passing default parameter C++传递默认参数 C++
【发布时间】:2016-01-02 09:38:38
【问题描述】:

我有一个方法 void setVal(msgA, functPtr* = NULL, paramTypePtr = NULL);

所以有两个不同的代码路径想要使用该方法。 1) 想要传入一条消息和 NULL functPtr 和一个有效的 paramTypePtr。 2) 想传入一条消息和有效的functPtr 和NULL paramTypePtr。

所以我可以调用案例 1) setVal(msg1,NULL,&param1); 对于情况 2) setVal(msg2,funct1Ptr,NULL);

以上 2 次调用是否有效?

PS:其他人编写了提供上述方法的框架。我知道它的设计应该有点不同,因为没有 2 个参数具有默认值。但是尝试看看我是否可以在不使用上述调用更改框架的情况下使用它。

【问题讨论】:

    标签: default-parameters


    【解决方案1】:

    C++中的默认参数可以写成如下。

    void DefaultParamCheck(int x = 0, int y =100);
    

    这里,DefaultParamCheck 是您的函数名称。并且第一个参数的值默认为0,第二个参数的值默认为100。

    你写了这个函数void setVal(msgA, functPtr* = NULL, paramTypePtr = NULL)。当您将 NULL 传递给第二个或第三个参数时,给出默认参数是没有意义的。

    在情况 1 中,您可以通过 setVal(msg1, NULL, (paramTypePtr)&param1) 调用该函数,因为它会将默认 NULL 作为第二个参数。否则会报错。

    情况2,可以通过setVal(msg2,funct1Ptr)调用函数,这里第三个参数默认为NULL。你不需要用 NULL 来调用它。

    【讨论】:

    • 那么你是否暗示如果我调用 setVal(msg1, (paramTypePtr)&param1) ;编译器将推断第二个参数为NULL。这个编译器是特定的还是 C++ 标准定义的?
    • 事实上,我只是通过删除案例 1 中的 NULL 来尝试它,当我编译时收到“错误:不匹配调用 ..”类型错误。在情况 2 中,我同意不需要 NULL 并且它工作正常。
    • 是的,你是对的。第一种情况在这里行不通。
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2012-08-06
    • 2016-05-12
    • 2020-07-29
    • 2014-04-09
    相关资源
    最近更新 更多