bb_*_*823 0 c++ decltype trailing-return-type
我看过这个函数,但我不知道这里发生了什么:
template <typename Container>
auto MaxElement(Container &c,int num_of_el)->decltype(c[0]){
int index=0;
for(int i=1;i<num_of_el;i++)
if(c[i]>c[index])
index=i;
return c[index];
}
Run Code Online (Sandbox Code Playgroud)
这是程序的主要部分:
int main(){
int a=7;
vector<decltype(a)> v;
v.push_back(a);
a=10;
v.push_back(5);
cout<<v[0]<<" "<<v[1]<<endl;
MaxElement(v,v.size())=10;
cout<<v[0]<<" "<<v[1]<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在理解 MaxElement 函数如何工作方面没有问题,但在理解诸如->decltype(c[0])? 那有什么作用?另外,我们怎样才能做类似的事情MaxElement(v,v.size())=10,这里发生了什么?
->decltype(c[0])?那有什么作用?
与auto作为返回类型的组合,它声明函数的返回类型与 的类型相同c[0],即int&。
在这种情况下,这意味着函数的类型与Container.
这是为了帮助 C++11 编译器,因为它们无法仅用auto.
一个简化的例子:
这在 C++11 中不起作用:
template<typename Container>
auto foo(Container& c) { // auto is `int` in >= C++14
return c[0];
}
Run Code Online (Sandbox Code Playgroud)
但这确实:
template<typename Container>
auto foo(Container& c) -> decltype(c[0]) { // auto is `int&`
return c[0];
}
Run Code Online (Sandbox Code Playgroud)
另外,我们怎样才能做类似的事情
MaxElement(v,v.size())=10,这里发生了什么?
在返回对象非引用的函数中const,您可以像分配任何其他对象一样分配给该对象。
请注意auto(没有 C++14 中的尾随decltype(C[0])及向前)将不会返回对返回对象的引用。它将按值返回它- 然后赋值将无法编译。
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |