所以我正在阅读有关 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/