一般来说,auto
- 关键字推导出的类型是否应该与编译器优化级别不变?或者,如果g++ -O3
和g++ -g
导致同一行代码的“auto”关键字的不同类型被推导出来,那么它是否与语言标准一致?
我有一个函数,称之为func(),它返回一个uint8_t,我注意到如果我这样做:
auto val = func();
然后val结束为uint8_t
没有优化和4字节类型(显然uint32_t
)并进行优化。
相关问题,因为我不能对函数的返回类型执行sizeof()
...我该怎么做才能获得不受编译器优化影响的函数返回类型的大小?
答案 0 :(得分:0)
要查找函数的返回类型的大小,请使用sizeof作为函数及其参数类型(在本例中为null)。
因此,在您的情况下,您会通过以下方式找到返回类型的大小:
auto WhatsMySize = sizeof(func());
您甚至可以设置断言来检查返回类型是否是您期望的 - 例如,检查重载是否按预期工作:
static_assert(std::is_same<decltype(func()), int>::value,
"func has incorrect return value");