sizeof()不能用与类的成员吗?
我用VC2012编译以下代码:
class C{
int m_i;
char m_str[4];
};
void p()
{
cout<<sizeof(C::m_i)<<endl;
cout<<sizeof(C::m_str)<<endl;
}
p函数里面的调用提示编译错误: error C2070: 'unknown': illegal sizeof operand
这是为什么呢? C++标准有没有说sizeof()能用于什么场景不能用于什么场景?
[解决办法]
改成static int m_i;就可以 了。
还要我进一步解释吗?
[解决办法]
http://en.cppreference.com/w/cpp/language/sizeof
[解决办法]
不行。
不过新版的 c++ 好像正在考虑增加这样的功能。
[解决办法]
C::m_i m_i属于对象 不属于C
[解决办法]
实例化对象后试试!
[解决办法]
这是成员变量,得通过实例访问呀
[解决办法]
可以这样来计算:
class C{
public:
int m_i;
char m_str[4];
};
int _tmain(int argc, _TCHAR* argv[])
{
sizeof( ((C *) 0)->m_i);
return 0;
}
[解决办法]
c++11是可以这样的,如果你用的不是c++11,有个暂时的解决办法:
#define SIZE_OF_MEMBER(cls, member) sizeof( ((cls*)0)->member )
cout << SIZE_OF_MEMBER(C, m_i) << endl; //不过需要成员是public属性的