【发布时间】:2021-02-25 07:43:01
【问题描述】:
我刚刚阅读了Is declval<T>() the same as (*(T*)nullptr)? 并刚刚意识到我以前没有听说过(*(T*)nullptr) 技巧。如果我分析那个sn-p,它不会给我太多信息,除此之外(引用答案)
您可以在 decltype 中获取 T 的实例,而无需担心 T 的构造函数
而且发现的例子也很简单:
struct B { A a; }; typedef decltype((*(B*)nullptr).a) T1;
那么,请有人向我解释一下这个 (*(T*)nullptr) 技巧是什么以及我为什么(以及如何)要使用它(除了上面的示例)?
编辑: decltype(B::a) 具有相同的含义 (https://gcc.godbolt.org/z/Pvjjza) 那么为什么要像这样过度复杂化呢?这个技巧的出现是否有任何历史意义(例如某些编译器不支持它或其他更有用的东西?)
【问题讨论】:
-
this thread 有帮助吗?接受的答案给出了为什么这样做/使用的一些背景。
-
@lubgr 谢谢,我也读过。我只是好奇这个奇怪的
(*(T*)nullptr)构造是否还有其他用途,或者这就是它被发明的唯一目的。