【问题标题】:C++: overloading a function with a void* function with functions with specific(double...) pointer parameterC++:使用具有特定(双...)指针参数的函数重载具有 void* 函数的函数
【发布时间】:2014-08-02 23:57:36
【问题描述】:

是否可以用空指针重载函数:

void setValue(void* value) { 
}

使用带有特定指针的函数?

void setValue(double* value) { 
}

如果我们传递一个 void* 值,这些重载函数的行为将如何。

void* lvalue;
setValue(lvalue);

如果我们传递一个特定的指针:

double* lvalue;
setValue(lvalue);

这会像预期的那样工作吗?

【问题讨论】:

    标签: c++ overloading


    【解决方案1】:

    Yes.

    #include <iostream>
    
    void f(double* ptr) { std::cout << "DOUBLE\n"; }
    void f(void* ptr) { std::cout << "VOID\n"; }
    
    int main()
    {
        void* v = nullptr;
        double* d = nullptr;
        f(v);
        f(d);
        // f(nullptr); // fails to compile
        // f(NULL); // fails to compile
    }
    

    输出:

    VOID
    DOUBLE
    

    现在,如果要编译 f(nullptr),请添加 f(std::nullptr_t) 重载。

    【讨论】:

      【解决方案2】:

      void*double* 是不同的类型,因此重载应该可以正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-26
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-19
        • 2019-01-21
        • 2015-04-15
        相关资源
        最近更新 更多