相关疑难解决方法(0)

指向不完整类型的成员函数的指针

我不明白为什么为类添加前向声明会将其指针的大小更改为成员类型

#include <iostream>
using namespace std;

int main()
{
    //struct CL;
    //cout<<sizeof(int (CL::*)())<<endl; 
    struct CL{};
    cout<<sizeof(int (CL::*)())<<endl;
}
Run Code Online (Sandbox Code Playgroud)

输出VS2013:
4

但是如果我取消注释main()中的前两行,那么输出是不同的:
16
16

因此,在struct CL的定义之前只添加一个前向声明只会增加指向CL成员的指针的大小.为什么?我知道成员函数指针的大小取决于类型的结构(例如,虚函数和基类可能会增加它),但为什么sizeof运算符可以应用于指向不完整类型成员的指针?还是不行?我没有在标准中找到它

c++ pointer-to-member incomplete-type

10
推荐指数
1
解决办法
396
查看次数

标签 统计

c++ ×1

incomplete-type ×1

pointer-to-member ×1