我正在阅读decltype
Scott Meyers 所著的有效现代 C++ 中的引用和右值引用。我有以下代码
template <typename container, typename index>
decltype(auto) authAndAccess(container&& c, index i) {
std::cout << "auth and Access c type: " << typeid(c[i]).name() << std::endl;
std::cout << "auth and Access c type expecting reference: " << typeid(std::forward<container>(c)[i]).name() << std::endl;
return std::forward<container>(c)[i];
}
deque<int> makeStringDeque() {
deque<int> dqContainer = { 1,2,3,4,5 };
return dqContainer;
}
现在在主要功能中我有以下
deque<int> dqContainer = { 1,2,3,4,5 };
std::cout << "Value returned by container: " << authAndAccess(dqContainer, 4) << std::endl;
authAndAccess(deque<int>{1, 2, 3, 4, 5}, 4) = 10;
std::cout << "Value returned by container and 5th element after copying: " << dqContainer[4] << endl;
我的问题是authAndAccess
函数接受右值参数,所以容器是临时的,返回的是对象是临时参考元素。但是为什么输出显示为int
我typeid
所期望的 forwared int &
。我确实理解 typeid 的 name 函数不准确,但是为什么在我们返回临时元素引用时它没有崩溃。