2
A
回答
5
當你有
auto a = { "lol", "life" };
編譯器將嘗試演繹一個std::initializer_list
其中類型是所有元素都是。在這種情況下,"lol"
和"life"
都是const char[]
,因此您有std::initializer_list<const char*>
。
如果對方有你有這樣的事情
auto foo = { 1, 2.0 };
那麼你將有一個編譯器錯誤,因爲元素類型是不同的。是
用於初始化器列表的自動扣除的規則與一個厚望如下
auto x1 = { 1, 2 }; // decltype(x1) is std::initializer_list<int>
auto x2 = { 1, 2.0 }; // error: cannot deduce element type
auto x3{ 1, 2 }; // error: not a single element
auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int>
的厚望是前C++ 17
auto x5{ 3 };
是std::intializer_list<int>
其中在C++ 17並且大多數已經採用該規則的編譯器將其推斷爲int
。
4
回答你的問題是std::intializer_list<char const*>
如果你想了解一個類型的非錯位的名稱,你可以使用未定義的模板技巧:
template<typename T>
void get_type_name(T&&);
然後調用它
auto a = { "", ""};
get_type_name(a);
你應該得到一個可讀的錯誤信息,說明沿着
undefined reference to `void get_type_name<std::initializer_list<char const*>&>(std::initializer_list<char const*>&)'
相關問題
- 1. 類的初始化列表
- 2. 自動初始化C#列表
- 3. 初始化內置類型初始化
- 4. 如何初始化自己的類型
- 5. 初始化自己的類型與串
- 6. 初始化向量的元組類成員初始化列表
- 7. 自動初始化?
- 8. 初始化在初始化列表
- 9. 初始化含有初始化列表
- 10. 的IntelliTrace:類型初始化
- 11. 單類的初始化水溼自動
- 12. 實例化類型初始化的內部列表
- 13. 如何使用列表初始化值來初始化聚合類型
- 14. 在類初始化和初始化列表
- 15. std ::數組初始化列表在初始化列表中初始化
- 16. C#動態類型初始化
- 17. 矩陣類的列表初始化
- 18. C++初始化類中的空列表
- 19. 單例類中的初始化列表
- 20. 類陣列的初始化
- 21. Java:如何初始化類型化對象列表?
- 22. 如何實現用戶定義類型的初始化列表? (analogus爲std :: vector的初始化列表)
- 23. 類型初始化例外
- 24. 無法初始化類型
- 25. 初始化Uri類型
- 26. 初始化泛型類
- 27. 初始化基本類型
- 28. 初始化對象類型
- 29. 初始化簡單類型
- 30. 無法初始化類型
你使用什麼標準? 11,14,17?自動初始化_列表已經有點揮發... – DeiDei
'const volatile auto a = {「trollin'」};' –