我正在尝试在编译时将某些数据类型的sizeof值分配给变量。
我尝试了以下代码:
constexpr int foo_implementation () {
return sizeof(int);
}
#define foo std::integral_constant<int, foo_implementation()>::value
int main() {
int size;
for(int i=0;i<10;i++) {
size = foo;
std::cout<<size<<std::endl;
}
return 0;
}
当我转储预处理器的输出时,它将foo替换为complete语句,这是预期的。
我的问题是将编译器的硬代码大小设置为4(假设int的大小为4),还是会一次又一次调用sizeof运算符。
如果没有,我如何在编译时将in的大小固定为编译时的size值,以节省运行时的额外指令执行?
答案 0 :(得分:0)
您的代码可以简化,#define
可以删除:
#include <type_traits>
#include <iostream>
constexpr auto foo = sizeof(int);
int main() {
int size;
for(int i=0;i<10;i++) {
size = foo;
std::cout<<size<<std::endl;
}
return 0;
}
如果您查看disassembly,则可能会看到编译器已将4
硬编码到可执行文件中。即使没有constexpr
,sizeof
也会在编译时而不是在运行时求值。