gpt4 book ai didi

c++ - std::common_type 实现

转载 作者:可可西里 更新时间:2023-11-01 15:51:22 37 4
gpt4 key购买 nike

为了了解它是如何工作的,我查看了标题 type_traitsstd::common_type 的 libstdc++ 实现。我不得不承认我并不真正理解它是如何工作的。在这里:

/// common_type
template<typename... _Tp>
struct common_type;

template<typename _Tp>
struct common_type<_Tp>
{ typedef _Tp type; };

template<typename _Tp, typename _Up>
struct common_type<_Tp, _Up>
{ typedef decltype(true ? declval<_Tp>() : declval<_Up>()) type; };

template<typename _Tp, typename _Up, typename... _Vp>
struct common_type<_Tp, _Up, _Vp...>
{
typedef typename
common_type<typename common_type<_Tp, _Up>::type, _Vp...>::type type;
};

我很清楚第一个、第二个和第四个声明是如何工作的。但是,我无法理解第三个声明是如何工作的。有人可以尝试解释这里使用的机制吗?

最佳答案

首先,std::declval<T>()产生 T 类型的右值.尝试对该值做任何事情都会失败,因此它只能在未评估的上下文中使用。接下来,三元运算符将其类型推导为两个参数共有的最特殊类型(如果没有这种类型,则失败)。所以,表达式的类型

true? declval<T0>(): declval<T1>()

T0 最专业的常见类型和 T1 .剩下的就是将此表达式转换为类型并确保不对它求值。 decltype(expr)就是这样做的。显然,逻辑的两个参数版本:其他版本用于处理极端情况(一个参数)并利用两个参数版本产生任意类型的通用类型。

关于c++ - std::common_type 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12290046/

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