首先,类型安全意味着如果做错了,编译器可以立即捕获的任何内容.
现在,我听说函数指针不是类型安全的,但是每当我试图错误地使用它们时,编译器都会为我报告错误.那么,它是如何键入不安全的?
例如,这是一个函数原型,它接受一个函数指针
void SortElements(void* MyArray, unsigned int iNumofElems,size_t size, int(*compare_funct)(void* First,void* SecondElem))
Run Code Online (Sandbox Code Playgroud)
我已经定义了几个函数来传递给它:
int MySortAsc(void* First, void* Second);
void MyFunct2();
void MyFunct3(void* First);
Run Code Online (Sandbox Code Playgroud)
该代码仅编译为:
SortElements(MyArray, 10, sizeof(DataType), &MySortAsc); //Compiles
SortElements(MyArray, 10, sizeof(DataType), &MyFunct2); //Fails
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能在这里误用函数指针?
是因为这个:
void (*functionPointer)();
...
int integer = 0xFFFFFFFF;
functionPointer = (void(*)())integer;
functionPointer();
Run Code Online (Sandbox Code Playgroud)
答:我要看到的是C++中的函数指针是类型安全的.当然,它们可以通过非常不安全的方式使用它们,但这并不能使它们成为被称为类型不安全的理由..NET委托也是强类型的,对我来说它看起来都是类型安全的.
c++ ×1