【发布时间】:2018-12-05 13:44:59
【问题描述】:
我试图在编译时将某些数据类型的 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 替换为完整的语句,这是预期的。
我的问题是编译器会将大小硬编码为 4(假设 int 的大小为 4)还是会一次又一次地调用 sizeof 运算符。
如果不是,我怎样才能在编译时在 int 大小的情况下修复 size 的值,以便在运行时节省额外的指令执行?
【问题讨论】:
-
sizeof(int)实际上从未被“调用”,因此您不妨直接使用它。每个编译器都会直接用生成的二进制文件中的值替换它。