Как я могу сравнить указатели на функции в С++? Устойчив?
Например, допустимо ли что-то подобное:
if(pFnc == &myFnc){
//Do something
}
Ответ 1
С++ 03 5.10/1 [expr.eq]:
Операторы == (равно) и a = = (не равные) имеют одинаковые семантические ограничения, преобразования и тип результата в качестве реляционных операторов, за исключением их более низкого приоритета и результата истины. [Примечание: a < б == c < d истинно, когда a < b и c < d имеют одинаковое значение истинности. ] Указатели на объекты или функции того же типа (после конверсий указателей) можно сравнить для равенства. Два указателя одного и того же тип сравнивается равным тогда и только тогда, когда оба они равны нулю, оба указывают на одна и та же функция или оба представляют один и тот же адрес (3.9.2).
Акцент на мой.
Ответ 2
Указатель функции по существу является адресом памяти, как любой другой указатель на С++. Поэтому при сравнении указателей вы всегда сравниваете адреса памяти, а не значения, что означает, что не имеет значения, на что указывают эти указатели, если оба указателя имеют один и тот же тип.
Ответ 3
Должны быть определены как pFnc, так и myFnc. Правильное сравнение: