这个代码每次用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();
}
答案 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);
}
由于静态只被初始化一次,只要工作可以在初始化时完成,编译器就会确保它只完成一次。