使用指针调用时使 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;
有什么方法可以使用 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;