gpt4 book ai didi

c++ - std::tuple 存储的垃圾值

转载 作者:行者123 更新时间:2023-11-27 23:58:36 25 4
gpt4 key购买 nike

我正在尝试实现 Variadic 模板。但是,我面临一个很长一段时间以来无法解决的奇怪问题。

下面是示例代码(重现了同样的问题):

#include<iostream>
#include<tuple>

template<typename... Args> struct Print_Helper
{
const std::tuple<const Args&...>& argTuple;

Print_Helper(const std::tuple<const Args&...>& argTuple)
:argTuple(argTuple)
{

}
};


template<typename fmtType,typename...Args> Print_Helper<const Args&...>
Print(fmtType fmt,const Args&... args)
{
Print_Helper<const Args&...> ipH(std::tuple<const Args&...>(args...));
return ipH;
}

template<typename... Args>
void otherFunc(Print_Helper<const Args&...> obj)
{
std::cout<<std::get<0>(obj.argTuple)<<"\n";
}

int main()
{

auto obj = Print("i=%", 1234);
std::cout<<std::get<0>(obj.argTuple)<<"\n";
otherFunc(obj);

}

问题是,在 main() 函数中,当我尝试打印元组的第一个元素时,它被正确打印了。但是,当我尝试传递对象(存储元组的对象)并尝试检索第一个参数的值时,它给我带来了垃圾。

请帮忙。我试图从很长一段时间内了解问题,但没有得到确切的问题。

谢谢。

最佳答案

您有悬空引用,因为您的成员是常量引用,并且您提供了一个临时引用:

Print_Helper<const Args&...> ipH(std::tuple<const Args&...>(args...));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// Temporary
// From now, ipH.argTuple is dangling.

关于c++ - std::tuple 存储的垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40793808/

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