c++ - 以下 C++ 程序无法编译并显示各种错误

标签 c++ c++11

所以我正在阅读有关 auto 和其他 C++11 std 功能的信息并制作了这个程序:

#include<iostream>
#include<tuple>
using namespace std;
template<typename T1, typename T2>
auto create_pair(const T1 &a, const T2 &b)
{

    pair<T1, T2> p(a, b);
    return p;

}
int main()
{
    auto p1 = create_pair(4, 5.6);
    pair<int, float> p(p1);
    cout << get<0>(p);
    cout << endl;
    cout << get<1>(p);
    return 0;

}

我的问题是 auto 是否可以按照 create_pair() 函数中规定的方式使用,或者是否存在一些其他解决方法来实现相同的结果。

用gcc编译时的错误信息是这样的:

create_pair function uses auto type specifier without return type.

最佳答案

自动返回类型推导是 C++14 的一项功能,如果使用 C++14 编译,您的代码将可以正常工作。返回类型位置中的 auto 关键字是 C++11 尾随返回类型功能的一部分,您可以在返回类型正前方用箭头和类型(例如, auto foo() -> int {...}).

如果没有宏,在 C++11 中最接近的是一个以单个语句(return 语句)作为主体的 lambda 函数,这不适用于模板,并且可能导致与函数是变量而不是函数。

使用宏,您可以得到 auto foo() RETURNS(2) 的效果,它会扩展为 auto foo() -> decltype(2) {return 2 ;}

附带说明一下,这个函数已经存在;它是 std::make_pair,它的实现比您的版本更有用。

关于c++ - 以下 C++ 程序无法编译并显示各种错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31077627/

相关文章:

c++ - typedef 模板,这个可行吗?

c++ - 为什么 map 插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多

c++ - 向 C++ 程序添加 MPI 支持

c++ - 程序加载/执行

c++ - const boost::array<T,N> 还是 boost::array<const T,N>?

c++ - 返回 unique_ptr 还是只是移动对象?

c++ - 当存在其他构造函数时,如何强制创建默认序列构造函数?

c++ - 从数组中选择一个数字

c++ - 如何找到满足 GCD(a,b) = x 的 a,b<N 对数?

c++ - Boost Asio 示例 HTTP 服务器——采用此示例并将其设为 "production ready"