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

Ale*_*son 23 c++ c++11

int myfun()
{
  return 42;
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以写

auto myvar = myfun();
Run Code Online (Sandbox Code Playgroud)

但是,如果我只是想声明myvar(不使用常见的typedef)怎么办?

the_type_returned_by_myfun myvar;
Run Code Online (Sandbox Code Playgroud)

什么可以写而不是the_type_returned_by_myfun

Xeo*_*Xeo 33

你可以用decltype.

decltype(myfun()) myvar;
// or
typedef decltype(myfun()) myfun_ret;
myfun_ret myvar2;
Run Code Online (Sandbox Code Playgroud)

如果函数恰好有参数,你可以生成伪参数std::declval.

#include <utility>

int my_other_fun(foo f);
typedef decltype(myfun(std::declval<foo>())) my_other_fun;
Run Code Online (Sandbox Code Playgroud)


wol*_*ang 9

decltype是你的朋友:

decltype(myfun()) myvar;
Run Code Online (Sandbox Code Playgroud)


Ara*_*raK 6

这是以下工作decltype:

decltype(myfun()) myvar;
Run Code Online (Sandbox Code Playgroud)