如何正确访问元组的成员

时间:2018-05-31 01:49:05

标签: c++ tuples

这个代码每次用std :: get访问它时都会更新元组的rand()值,但是我希望它能被修复(初始化一次)。为什么std :: get没有像我预期的那样表现?

#include <iostream>
#include <tuple>

std::tuple<int, int> test(int a)
{
return std::make_tuple(a, rand() % 100);
}

int main()
{
test(5);
for (int i = 0; i < 10; i++)
    std::cout << std::get<1>(test(5)) << '\n';

std::cin.get();
}

2 个答案:

答案 0 :(得分:-1)

很难理解你,但看起来你需要这个:

auto tup = test(5);
for (int i = 0; i < 10; i++)
    std::cout << std::get<1>(tup) << '\n';

然后您将从变量tup访问相同的值,您会看到std::get不会修改它。但是如果你每次创建新的元组对象时都调用test(),那么问题就在于std::get不会修改它。

答案 1 :(得分:-2)

如果要避免重新生成随机值,请使用函数静态变量在第一次调用时创建所需的固定返回值,然后返回该值:

std::tuple<int, int> test(int a)
{
    static auto randval = rand() % 100;
    return std::make_tuple(a, randval);
}

由于静态只被初始化一次,只要工作可以在初始化时完成,编译器就会确保它只完成一次。