在编译时打印sizeof(T)
Printing sizeof(T) at compile time
可能重复:
是否可以在编译时打印出C++类的大小?
我可以在编译时输出对象的大小吗?由于编译器在编译源文件时已经有了这些信息,我是否可以(在编译时(查看,而不是在应用程序控制台或调试输出窗口中的某个位置输出大小的漫长过程?
这将非常有用,尤其是当我能够编译单源文件时,这将为我在处理大型项目时节省大量时间。
是。可能的重复将大小打印为错误消息,这意味着编译将不会成功。
但是,我的解决方案将大小打印为警告消息,这意味着它将打印大小,并且编译将继续。
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
演示: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
演示:http://www.ideone.com/mhXjU
这个想法取自我之前对这个问题的回答:
- 在C中计算和打印编译时的阶乘++
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- 你能使用 sizeof() 打印由 char * 指向的数组的大小吗?
- 为什么 sizeof( "string" ) 打印的长度比 "string" 的长度多一个?
- 在编译时打印sizeof(T)