我在閱讀Scott Meyers的Effective Modern C++我試圖在我的機器上爲推導類型章節提供的示例。追尾返回類型和右值
他提供了這樣的功能:
template <typename Container, typename Index>
auto decltype_test_1(Container& c, Index i) -> decltype(c[i])
{
return c[i];
}
然後它使用函數以這種方式:
std::deque<int> d;
…
decltype_test_1(d, 5) = 10; // authenticate user, return d[5],
// then assign 10 to it;
// this won't compile!
說,它不會編譯。我嘗試使用MSVC,它編譯。我寫在main
如下:
std::deque<int> d;
d.push_back(0);
d.push_back(1);
d.push_back(2);
decltype_test_1(d, 0) = 10;
for each (auto item in d)
cout << item << endl;
我不明白爲什麼它編譯和,最重要的是,它顯示10
爲雙端隊列的第一個元素。對於他解釋的這段代碼是錯誤的。它爲什麼在這裏工作?我錯過了什麼?
它看起來像有使用'decltype',他說,它工作正常,其次是一個例子,而不'decltype'他說,這是不完全正確的例子。函數調用是後者的一部分。當然,還有第三種是「decltype(auto)」。 – chris
你的第二個片段調用函數'authAndAccess',而第一個片段定義'decltype_test_1'。我沒有這本書,因此我不知道它是否是一個錯字... – user463035818