【发布时间】:2016-10-02 09:22:11
【问题描述】:
我正在读一本书,它解释了 C++ 特征,并且有一个来自 C++ type_traits 标头的示例,其中有一个奇怪的 ?: 用法,这是来自相应 /usr/include/c++/... 文件的引用:
template<typename _Tp, typename _Up>
static __success_type<typename decay<decltype
(true ? std::declval<_Tp>()
: std::declval<_Up>())>::type> _S_test(int);
抛开给定声明的目的,?: 运算符的用法在这段代码中让我感到困惑。如果第一个操作数是true,则始终选择std::declval<_Tp>() 作为评估结果。
declval 操作数选择实际上是如何工作的?
编辑:最初阅读 Nicolai M. Josuttis 的“C++ 标准库:教程和参考,第 2 版”,第 125 页。但与我的 GCC 头文件相比,它以稍微简化的形式给出。
【问题讨论】:
-
顺便说一句,这本书是什么?
-
这里重要的是表达式的类型,而不是要计算的部分。
-
马特说了什么。该表达式用于使用三元条件运算符类型推导机制(您可以阅读它们here)。