具有编译器优化级别的C ++`auto'关键字的行为

时间:2017-05-27 22:10:08

标签: c++ optimization

一般来说,auto - 关键字推导出的类型是否应该与编译器优化级别不变?或者,如果g++ -O3g++ -g导致同一行代码的“auto”关键字的不同类型被推导出来,那么它是否与语言标准一致?

我有一个函数,称之为func(),它返回一个uint8_t,我注意到如果我这样做:

auto val = func();

然后val结束为uint8_t没有优化和4字节类型(显然uint32_t)并进行优化。

相关问题,因为我不能对函数的返回类型执行sizeof() ...我该怎么做才能获得不受编译器优化影响的函数返回类型的大小?

1 个答案:

答案 0 :(得分:0)

要查找函数的返回类型的大小,请使用sizeof作为函数及其参数类型(在本例中为null)。

因此,在您的情况下,您会通过以下方式找到返回类型的大小:

auto WhatsMySize = sizeof(func());

您甚至可以设置断言来检查返回类型是否是您期望的 - 例如,检查重载是否按预期工作:

static_assert(std::is_same<decltype(func()), int>::value,
   "func has incorrect return value");