使用指针调用时使 decltype 输出为非引用类型

Make decltype output a non reference type when called with a pointer

有什么方法可以使用 decltype 或任何其他 c++17 功能来获得以下代码片段

T *a = nullptr;
decltype(*a) b = 0;

编译为

T *a = nullptr;
T b = 0;

而不是

T *a = nullptr;
T &b = 0;

其中 T 是未知类型。

您可以使用 std::remove_reference or std::decay

int *a = nullptr;
std::decay_t<decltype(*a)> b = 0;

获得此行为的一种简单方法是使用一元 + 将左值 *a 衰减为右值,如下所示:

decltype(+*a) b = 0;

请注意,这仅适用于 int 等类型,您可以在其中使用一元 +

没有。无法使 int *a; decltype(*a) 解析为 int

一个简单的替代方法是使用类型别名而不是尝试处理 decltype:

using T = int;
T *a = nullptr;
T b = 0;