c++ - Function pointer traps -


from below code snippet getting address of function 1. why ?

#include<iostream> using namespace std; int  add(int x, int y) {   int z;   z = x+y;   cout<<"ans:"<<z<<endl; }  int main() {   int a=10, b= 10;   int (*func_ptr) (int,int);   func_ptr  = &add;   cout<<"the address of function add()is :"<<func_ptr<<endl;   (*func_ptr) (a,b); } 

function pointers aren't convertible data pointers. you'd compiler error if try , assign 1 void* variable. implicitly convertible bool!

that why bool overload operator<< chosen on const void* one.

to force overload want, you'd need use strong c++ cast, almost ignore static type information.

#include<iostream> using namespace std; int  add(int x, int y) {   int z;   z = x+y;   cout<<"ans:"<<z<<endl; }  int main() {   int a=10, b= 10;   int (*func_ptr) (int,int);   func_ptr  = &add;   cout<<"the address of function add()is :"<< reinterpret_cast<void*>(func_ptr) <<endl;   (*func_ptr) (a,b); } 

note casting , treating function pointers data pointers officially (from c++ standard standpoint) resulting in ub. though compilers reasonable.


Comments

Popular posts from this blog

php - How to add and update images or image url in Volusion using Volusion API -

javascript - jQuery UI Splitter/Resizable for unlimited amount of columns -

javascript - IE9 error '$'is not defined -