在C ++中,是否可以获取函数的返回类型以声明变量而不调用该函数?

时间:2011-12-21 16:46:08

标签: c++ c++11

int myfun()
{
  return 42;
}

我知道我可以写

auto myvar = myfun();

但如果我只是想声明myvar(不使用公共typedef)该怎么办?

the_type_returned_by_myfun myvar;

可以写什么而不是the_type_returned_by_myfun

3 个答案:

答案 0 :(得分:33)

您可以使用decltype

decltype(myfun()) myvar;
// or
typedef decltype(myfun()) myfun_ret;
myfun_ret myvar2;

如果函数恰好有参数,则可以使用std::declval生成伪参数。

#include <utility>

int my_other_fun(foo f);
typedef decltype(myfun(std::declval<foo>())) my_other_fun;

答案 1 :(得分:9)

decltype是你的朋友:

decltype(myfun()) myvar;

答案 2 :(得分:6)

这是decltype

的工作
decltype(myfun()) myvar;