gpt4 book ai didi

c++ - 这个语法 "decltype(*(T*)(0)**(U*)(0)) "是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 22:26:44 26 4
gpt4 key购买 nike

我正在阅读 this question on isocpp FAQ here ,这个问题是在解释如何写???

的返回类型
template<class T, class U>
??? mul(T x, U y)
{
return x*y;
}

我知道简单的方法是写 auto mul(T x, U y) -> decltype(x*y),但是问题还给出了另一种方法,即替换 ??? decltype(*(T*)(0)**(U*)(0))。但是我不完全明白这个 decltype(*(T*)(0)**(U*)(0)) 到底在做什么,好像是在声明一个临时指针T* 并将其初始化为零,然后取消引用指针,然后乘以 U 类型的相同对应项,我的理解对吗?

但是为什么要使用指针呢?我认为 decltype(T(0)*U(0))decltype(T{0}*U{0}) 也应该可以工作。

最佳答案

decltype(*(T*)(0)**(U*)(0))

让我们分开:

(T*)(0) //cast a null pointer to a T*
*(T*)(0) //dereference, giving a T

(U*)(0) //cast a null pointer to a U*
*(U*)(0) //dereference, giving a U

(*(T*)(0)) * (*(U*)(0)) //the result of multiplying a U and a T

decltype(T(0)*U(0)) 仅当 TU 的构造函数采用单个 int(或可以从整数文字隐式转换为的东西)。

标准库已经有一个 std::declval以更清洁的方式执行此操作:

decltype(std::declval<T>() * std::declval<U>())

关于c++ - 这个语法 "decltype(*(T*)(0)**(U*)(0)) "是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32462216/

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