Сравнение указателей функций - программирование
Подтвердить что ты не робот

Сравнение указателей функций

Как я могу сравнить указатели на функции в С++? Устойчив?

Например, допустимо ли что-то подобное:

if(pFnc == &myFnc){
//Do something
}
4b9b3361

Ответ 1

С++ 03 5.10/1 [expr.eq]:

Операторы == (равно) и a = = (не равные) имеют одинаковые семантические ограничения, преобразования и тип результата в качестве реляционных операторов, за исключением их более низкого приоритета и результата истины. [Примечание: a < б == c < d истинно, когда a < b и c < d имеют одинаковое значение истинности. ] Указатели на объекты или функции того же типа (после конверсий указателей) можно сравнить для равенства. Два указателя одного и того же тип сравнивается равным тогда и только тогда, когда оба они равны нулю, оба указывают на одна и та же функция или оба представляют один и тот же адрес (3.9.2).

Акцент на мой.

Ответ 2

Указатель функции по существу является адресом памяти, как любой другой указатель на С++. Поэтому при сравнении указателей вы всегда сравниваете адреса памяти, а не значения, что означает, что не имеет значения, на что указывают эти указатели, если оба указателя имеют один и тот же тип.

Ответ 3

Должны быть определены как pFnc, так и myFnc. Правильное сравнение:

if(pFnc == myFnc)
{
    //Do something
}