如何使用数值数组文字

How to use a numerical array literal

本文关键字:数组 文字 何使用      更新时间:2023-10-16

我想只使用一次数组,并且不想为它声明名称,例如,像

这样的东西
int a,b,c;
void foo(int[],int);
...
a=1; b=2; c=3;
foo({a,b,c},3);
...

我很确定这是行不通的,但是我怎样才能使它工作呢?

如果您使用std::vectorstd::array,事情会变得更容易。

void foo(std::vector<int> xs)
{
    for (const auto& x : xs)
    {
        std::cout << x << ' ';
    }
}
int main()
{
    foo({ 10,11,12 });
}

如果您只想使用数组"literal"一次,请考虑对std::array的右值引用:

// Declaration:
template<size_t s>
void foo(std::array<int, s>&& arr) {
    // ....
}
//Call:
foo(std::array<int, 3>{1,2,3});

使用std::vectorstd::array作为Nicky C的答案是更好的。

但要回答你的问题,你可以这样做:

void foo(int[],int);
int main()
{
    foo(std::vector<int>{10, 11, 12}.data(), 3);
}

另一种尚未提到的方法是使用std::initializer_list

#include <initializer_list>
void foo(std::initializer_list<int> lst,int i)
{
}
int main()
{
    int a,b,c;
    a=1; b=2; c=3;
    foo({a,b,c},3);
}

或者你可以使用模板

template<typename T, std::size_t N>
void foo(const T (&lst)[N],int i)
{
}