gpt4 book ai didi

c++ - 为什么我不能创建一个自动变量数组?

转载 作者:IT老高 更新时间:2023-10-28 22:59:31 27 4
gpt4 key购买 nike

在 C++0x(哦!阅读 C++11)中,我们有自动类型推断。让我好奇的一件事是我无法创建自动变量数组。例如:

auto A[] = {1, 2, 3, 4}; // Error!

任何想法为什么这可能被禁止?

最佳答案

auto将每个用大括号括起来的初始化器列表推导出为 std::initializer_list<T> . (参见 §7.1.6.4.6 包括示例)。不幸的是,您无法初始化数组甚至 std::array来自 std::initializer_list一旦你获得它,但你可以使用 std::vector .

#include <vector>
#include <array>
#include <initializer_list>

int main()
{
auto x = {1,2,3};
std::array<int, 3> foo1 = x; // won't work for whatever reason
std::vector<int> foo2 = x; // works as expected
return 0;
}

当然,这违背了您尝试做的全部目的。

我尝试编写一个名为 make_array 的解决方法但必须意识到这不能像 initializer_list 的大小一样工作。不是其模板参数的一部分,因此您只需实例化一个 make_array每个 T 的模板.这很糟糕。

template<typename T> 
auto make_array(const std::initializer_list<T>& x)
-> std::array<T, x.size()> { } // maaah

好吧,显然你可以使用这里提到的可变参数模板技巧 How do I initialize a member array with an initializer_list?

关于c++ - 为什么我不能创建一个自动变量数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7107606/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com