[現代有效的C++]說:爲什麼「auto」在推導返回值時無法接受braced-init-list?
template<class T>
void f(T t){}
int main(){
f({1,2,3});
}
將失敗的編譯,因爲當模板實例,T的類型必須是已知的,而在這裏{1,2,3}的支撐,初始化列表。應該解決,如:
auto x={1,2,3};//auto deduces x to std::initializer_list
f(x);
我能理解這一點,但後來我的問題:
爲什麼這本書繼續說,使用「自動」的返回值扣除時,它不能接受並推斷支撐-INIT -list?
auto f()
{
return {1,2,3};
}
將無法編譯。
Emmmmm,如果這是C++ 14標準的一部分,我不明白爲什麼有這樣的限制,並且它繼續說:
auto resetV=[&v](const auto& newValue){v=new Value;}
「自動」,「NEWVALUE」之前不能接受{1,2,3}。爲什麼我們有這樣的2個限制?
我想也許從語言設計的角度來看,做類型演繹時會有些混亂嗎?只是一個猜測。 這些設計決定的任何線索?它讓我困惑了好幾天。
謝謝。
不只是「潛在」。只要離開函數,該數組就是一個ex數組。 –
返回類型是initializer_list對象的副本,爲什麼它是一個ex數組?謝謝 –