我的代码中有这样的东西
val = boost::make_tuple(objA , objB);
我的问题是boost::make_tuple
是否制作了objA和objB的副本?
答案 0 :(得分:6)
是的,返回的对象是boost::tuple<A, B>
,其中包含A
对象和B
对象,因此必须从参数中复制它们。
如果您想要一个引用元组,请改用boost::tie(objA, objB)
,它会返回boost::tuple<A&, B&>
。
答案 1 :(得分:3)
是的。元组按值保存变量,因此必须将值复制到元组中。如果只想复制它们的引用,请改用指针,即boost::make_tuple(&objA,&objB)
。
答案 2 :(得分:3)
是的,如果你想保留引用,请使用boost :: ref(或const引用的cref)......
boost::make_tuple(boost::cref(objA), boost::cref(objB));