Учитывая типичную функцию, которая принимает C-Functionpointer в качестве обратного вызова, например C-Stdlib qsort ()
, может ли компилятор оптимизировать код, используя встраивание? I думаю, что нет, это правильно?
int cmp(void* pa, void* pb) { /*...*/ }
int func() {
int vec[1000];
qsort(vec, 1000, sizeof(int), &cmp);
}
Хорошо, qsort ()
- это функция из внешней библиотеки, но я не думаю, что даже LTO здесь поможет, правильно?
Но что, если у меня есть my_qsort ()
, определенный в той же единице компиляции, будет ли тогда встраивание возможно для компилятора?
int cmp(void* pa, void* pb) { /*...*/ }
void my_qsort(int* vec, int n, int sz, (void*)(void*,void*)) { /* ... */ }
int func() {
int vec[1000];
my_qsort(vec, 1000, sizeof(int), &cmp);
}
Имеет ли это значение? Я думаю, что использование указателя на C-функцию в качестве обратного вызова является фактором, препятствующим встраиванию компилятора. Правильно?
(Я просто хочу убедиться, что понимаю, почему я должен использовать Функторы в C ++)