Return std::tuple 在 C++11 中包含常量引用
Return std::tuple containing const-reference in C++11
我有这样的东西 (C++11)
std::tuple<const MyType&, bool> func()
{
return std::make_tuple(some_internal_reference, true);
}
问题是我无法在调用者中声明:
const MyType& obj; // this does not compile of course
bool b;
std::tie(obj, b) = func();
一个想法是 return 布尔值作为输出参数并删除元组,但是有更好的解决方案吗?
使用std::get
。它 returns 对存储元素的引用。
#include <iostream>
#include <tuple>
using MyType = int;
MyType some_internal_reference = 42;
std::tuple<const MyType&, bool> func()
{
return { some_internal_reference, true };
}
int main()
{
auto ret = func();
const MyType& obj = std::get<0>(ret);
std::cout << "before change: " << obj << '\n';
some_internal_reference = 7;
std::cout << "after change: " << obj << '\n';
}
它打印
before change: 42
after change: 7
注意,根据@StoryTeller-UnslanderMonica 的评论,在这种情况下不要使用 std::make_tuple
。它存储一个衰减(裸类型)副本。
我有这样的东西 (C++11)
std::tuple<const MyType&, bool> func()
{
return std::make_tuple(some_internal_reference, true);
}
问题是我无法在调用者中声明:
const MyType& obj; // this does not compile of course
bool b;
std::tie(obj, b) = func();
一个想法是 return 布尔值作为输出参数并删除元组,但是有更好的解决方案吗?
使用std::get
。它 returns 对存储元素的引用。
#include <iostream>
#include <tuple>
using MyType = int;
MyType some_internal_reference = 42;
std::tuple<const MyType&, bool> func()
{
return { some_internal_reference, true };
}
int main()
{
auto ret = func();
const MyType& obj = std::get<0>(ret);
std::cout << "before change: " << obj << '\n';
some_internal_reference = 7;
std::cout << "after change: " << obj << '\n';
}
它打印
before change: 42
after change: 7
注意,根据@StoryTeller-UnslanderMonica 的评论,在这种情况下不要使用 std::make_tuple
。它存储一个衰减(裸类型)副本。