可能的重复:
是否可以在编译时打印出 C++ 类的大小?
我可以在编译时输出对象的大小吗?由于编译器在编译源文件时已经有了这些信息,我可以吗?see它(在编译时)而不是经历在应用程序控制台或调试输出窗口中某处输出大小的漫长过程?
这将非常有用,特别是当我能够编译单个源文件时,这可以在处理大型项目时节省大量时间。
是的。可能的重复打印尺寸为error消息,这意味着编译不会成功。
但是,我的解决方案将尺寸打印为warning消息,这意味着它将打印大小,然后编译将继续。
template<int N>
struct print_size_as_warning
{
char operator()() { return N + 256; } //deliberately causing overflow
};
int main() {
print_size_as_warning<sizeof(int)>()();
return 0;
}
警告信息:
prog.cpp: In member function ‘char print_size_as_warning<N>::operator()() [with int N = 4]’:
prog.cpp:8: instantiated from here
prog.cpp:4: warning: overflow in implicit constant conversion
Demo : http://www.ideone.com/m9eg3
注意:警告消息中N的值为sizeof(int)的值
上面的代码是改进的,我的第一次尝试是这样的:
template<int N>
struct _{ operator char() { return N+ 256; } }; //always overflow
int main() {
char(_<sizeof(int)>());
return 0;
}
警告信息:
prog.cpp: In member function ‘_<N>::operator char() [with int N = 4]’:
prog.cpp:5: instantiated from here
prog.cpp:2: warning: overflow in implicit constant conversion
Demo : http://www.ideone.com/mhXjU
这个想法取自我之前对这个问题的回答:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)