decltype(std::get<0>(tup))是什么?

6

我目前正在学习C++中的元编程,并尝试查看元组中的元素是否为指针。我尝试了以下方法:

int a = 3, b = 4;
auto tup = std::make_tuple(&a, b);
std::cout << std::is_pointer<decltype(std::get<0>(tup))>::value; //prints 0

我认为这很奇怪,因此我检查了clang推断的类型(我正在使用clang-10),这个类型是

__tuple_element_t<0UL, tuple<int *, int>

看起来是某种内部类型。

为什么我得到这个奇怪的类型,正确的方法是什么来获取元组中元素的实际类型?我只有使用一个中间 auto 变量的解决方案,但这几乎不是最优解。

2个回答


4

正如恩里克(Enrico)所解释的那样,你得到的类型是一个引用。 除了他的回答之外,我想说你可以更容易地获取元组元素的实际类型:

std::tuple_element_t<0, decltype(tup)>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接