下面這段代碼不能編譯:
template<typename... Ts>
void CreateArr(const Ts& ... args)
{
auto arr[sizeof...(args) 1]{ args... };
}
int main()
{
CreateArr(1, 2, 3)。
}
由于以下的錯誤:
'arr': 在一個直接串列初始化的背景關系中,'auto [6]'的型別只能從一個單一的初始化運算式中推匯出來auto [6]':一個陣列不能有一個包含'auto''const int'轉換到'std::initializer_list<int> '我的問題是:
為什么我不能使用
auto來定義陣列的型別?如何正確地定義它以與模板一起作業?
<
uj5u.com熱心網友回復:
為什么我不能使用auto來定義陣列的型別?
出于同樣的原因,下面的內容也不可行/不允許!
auto ele[]{ 1, 2, 3 };
更多閱讀。為什么我不能創建一個自動變數的陣列?
如何正確地定義它,以便與模板一起作業?
使用std::common_type_t來指定型別
#include <type_traits> //std::common_type_t
template<typename。Ts>
void CreateArr(const Ts& ... args)
{
std::common_type_t<Ts...> arr[sizeof...(args)]{ args... };
static_assert(std::is_array_v<int[sizeof...(args)]>, "is not array!" />)。
(看到一個實時演示)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/314111.html
標籤:
