C ++ 14中的返回类型推导赋值

时间:2016-08-18 11:35:58

标签: c++ c++14 return-type

我想知道在C ++ 14中是否可以以某种方式在赋值中返回类型推导。在<int>函数名称后键入return_five会感到多余。因此,换句话说,编译器是否可以使用分配左侧的信息?

#include <iostream>
#include <string>

template<typename T>
auto return_five()
{
    return static_cast<T>(5);
}

int main()
{
    int five_int = return_five();         // THIS DOES NOT WORK
    // int five_int = return_five<int>(); // THIS WORKS

    std::cout << "Five_int = " << five_int << std::endl;

    return 0;
}

5 个答案:

答案 0 :(得分:3)

C ++ ain&lt; VBA:作业左侧的内容是用于推断右侧的类型

因此编译器需要return_five()的显式类型。您可以通过编写return_five<int>()来告知编译器类型。

答案 1 :(得分:1)

不,但这是你能做的最好的事情:

int main() {
  auto five_int = return_five<int>();
  // ...
}

答案 2 :(得分:0)

它不是返回类型推导,而是模仿返回类型:

template<typename T>
T return_five()
{
    return 5;
}

答案 3 :(得分:0)

这是不可能的。函数的模板参数仅从函数参数推导出来,而不是从返回类型推导出来(不幸的是)。

您可能不太感兴趣,但推断模板参数的方法如下:

template<typename T>
void return_five(T& value)
{
    value = static_cast<T>(5);
}

...

int five_int;
return_five(five_int);

答案 4 :(得分:0)

嗯,这很有效:

struct return_five {
    template <class T>
    operator T() const { return 5; }
};

int main (int, char**) {
    int five_int = return_five();

    std::cout << five_int << '\n';
}

提示:您可能不想在生产代码中实际使用它。