Size: a a a

2020 August 01

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Если его примут, можно будет сделать шаблонную туплю, являющуюся агрегатным типом
источник

VK

Valentin Kornienko in supapro.cxx
#include <iostream>

struct S;
void (S::*foo_ptr)(void);
void (*bar_ptr)(void);  
   
int main()
{
   int a = sizeof(foo_ptr);
   int b = sizeof(bar_ptr);
   std::cout << "non-static member function pointer: " << a << std::endl;
   std::cout << "function pointer: " << b << std::endl;
}
источник

VK

Valentin Kornienko in supapro.cxx
non-static member function pointer: 16
function pointer: 8
gcc 11, x64
источник

VK

Valentin Kornienko in supapro.cxx
Почему такое поведение?
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Указатель на член хранит смещение еще
источник

A

Alex Ф-ф-фэils!🌠︙... in supapro.cxx
Valentin Kornienko
Почему такое поведение?
Потому что он хранит указатель на метод и указатель на this, который нужен для этого метода
источник

VK

Valentin Kornienko in supapro.cxx
Чорт. Точно. Спасибо!
источник

VK

Valentin Kornienko in supapro.cxx
Чего то забылось совсем
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
В мсвс кстати размер указателя на член может быть разным в разном контексте
источник

AK

Anton Kviatkovskii in supapro.cxx
Alex Ф-ф-фэils!🌠︙
Потому что он хранит указатель на метод и указатель на this, который нужен для этого метода
Точно указатель на this то?
источник

AK

Anton Kviatkovskii in supapro.cxx
Ты ж не можешь вызвать указать на мембера без объекта
источник

AK

Anton Kviatkovskii in supapro.cxx
Там смещение скорее всего, да
источник

A

Alex Ф-ф-фэils!🌠︙... in supapro.cxx
Anton Kviatkovskii
Точно указатель на this то?
Я уже не помню, давно их реверсил(🤷‍♂
источник

AK

Anton Kviatkovskii in supapro.cxx
Alex Ф-ф-фэils!🌠︙
Я уже не помню, давно их реверсил(🤷‍♂
A pointer to member function is a pair as follows:

ptr:
For a non-virtual function, this field is a simple function pointer. (Under current base Itanium psABI conventions, that is a pointer to a GP/function address pair.) For a virtual function, it is 1 plus the virtual table offset (in bytes) of the function, represented as a ptrdiff_t. The value zero represents a NULL pointer, independent of the adjustment field value below.
adj:
The required adjustment to this, represented as a ptrdiff_t.
источник

A

Alex Ф-ф-фэils!🌠︙... in supapro.cxx
В msvc оно могло содержать ещё больше инфы
источник

A

Alex Ф-ф-фэils!🌠︙... in supapro.cxx
Во, да, вроде бы статья была про "самые быстрые делегаты на c++"
источник

A

Alex Ф-ф-фэils!🌠︙... in supapro.cxx
Там чувак препарировал указатели на методы
источник

A

Alex Ф-ф-фэils!🌠︙... in supapro.cxx
Указатели на функции-члены и реализация самых быстрых делегатов на С++.
https://www.rsdn.org/article/cpp/fastdelegate.xml
источник

ЗВ

Захар Виноградов... in supapro.cxx
Danya
Какой у тебя стандарт С++? Где ты программируешь?
Программирую на самое новой студии + иногда делаю проекты на Dev-cpp, когда надо что-то протестировать или проверить.
источник

D

Danya in supapro.cxx
Захар Виноградов
Программирую на самое новой студии + иногда делаю проекты на Dev-cpp, когда надо что-то протестировать или проверить.
Ну тогда поставь в настройках проекта стандарт c++latest
И напиши в свой класс auto operator<=>(MyClass) = default;
источник