C ++:使用带有特定(double ...)指针参数的函数的void *函数重载函数

时间:2014-07-31 14:49:28

标签: c++ overloading

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

void setValue(void* value) { 
}

带有特定指针的函数?

void setValue(double* value) { 
}

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

void* lvalue;
setValue(lvalue);

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

double* lvalue;
setValue(lvalue);

这会像预期的那样发挥作用吗?

2 个答案:

答案 0 :(得分:1)

void*double*是不同的类型,因此重载应该按预期工作。

答案 1 :(得分: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)重载。