//decltype 配合模板函数一起使用
//此处auto不会做任何推导工作,只暗示使用了C++11的尾置返回类型语法,即“ -> ” 指出函数返回类型
template<typename Container, typename Index>
auto autoAndAccess(Container& c, Index i) -> decltype(c[i]) {
......
return c[i];
}
std::deque<int> d;
autoAndAccess(d, 5) = 10; // d[5] 本该返回int&, 但是模板类型会剥去引用部分,因此返回int类型,尝试把10 赋值给右值 int,C++禁止这样做,所以代码无法编译
// C++ 期望在某些情况下当类型按时时需要使用decltype 类型推导的规则,C++14通过使用decltype(auto)说明符使这成为可能
template<typename Container, typename Index>
decltype(auto) autoAndAccess(Container& c, Index i) {
......
return c[i];
}
std::deque<int> d;
autoAndAccess(d, 5) = 10; // return int&, right
item3: 理解decltype
于 2024-10-22 11:41:07 首次发布