如何使用数值数组文字

时间:2016-09-05 03:45:40

标签: c++ arrays c++11 literals

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

int a,b,c;
void foo(int[],int);
...
a=1; b=2; c=3;
foo({a,b,c},3);
...

我很确定这不起作用,但我怎样才能使它工作?

4 个答案:

答案 0 :(得分:2)

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

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

int main()
{
    foo({ 10,11,12 });
}

答案 1 :(得分:0)

如果你想使用数组&#34; literal&#34;只考虑一次,考虑对std::array的右值引用:

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

//Call:
foo(std::array<int, 3>{1,2,3});

答案 2 :(得分:0)

另一种未提及的方法是使用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)
{
}

答案 3 :(得分:0)

在Nicky C的回答中使用std::vectorstd::array会更好。

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

void foo(int[],int);

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