为什么在创建内置数组的模板函数中不允许使用 auto?
Why auto is not allowed in template function for creating a built-in array?
下面这段代码无法编译:
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'
的元素类型
- 'initializing':无法从
'const int'
转换为 'std::initializer_list<int>'
我的问题是:
为什么我不能用auto
来定义数组的类型?
如何正确定义它以使用模板?
Why cannot I use auto
to define the type of the array?
出于同样的原因,以下操作无效/不允许!
auto ele[]{ 1, 2, 3 };
更多阅读:Why can't I create an array of automatic variables?
How to define it properly to work with the template?
使用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!");
}
下面这段代码无法编译:
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'
的元素类型
- 'initializing':无法从
'const int'
转换为'std::initializer_list<int>'
我的问题是:
为什么我不能用
auto
来定义数组的类型?如何正确定义它以使用模板?
Why cannot I use
auto
to define the type of the array?
出于同样的原因,以下操作无效/不允许!
auto ele[]{ 1, 2, 3 };
更多阅读:Why can't I create an array of automatic variables?
How to define it properly to work with the template?
使用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!");
}