17

The name of a function is a pointer to the function...
But in case of function overloading the names of two functions are the same...
So which function does the name point to?

1

1 Answer 1

21

It depends on the context; otherwise it's ambiguous. See this example (modified except below):

void foo(int a) { }
void foo(int a, char b) { }

int main()
{
    void (*functionPointer1)(int);
    void (*functionPointer2)(int, char);
    functionPointer1 = foo; // gets address of foo(int)
    functionPointer2 = foo; // gets address of foo(int, char)
}

You can do this in many ways, but the #1 rule?

Avoid casts!

Otherwise you'll break type safety and probably shoot yourself in the foot either then or later.
(Issues can come up with calling conventions, random changes you don't notice, etc.)

Sign up to request clarification or add additional context in comments.

4 Comments

+1. @Mehrdad and @Ben: Point Noted which you two said in my post. Thanks :-)
@Nawaz: Come to think of it, maybe I should mention that in my post too. I'll add it. :)
Yeah. That would be better, more complete. :-)
Sometimes casts are necessary. I have run into this when trying use boost::bind with overloaded member functions. Whenever possible, it is best to rename the functions to avoid the cast.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.