我在读一本书,它解释了C++特征,并且有一个例子来自C++ type_traits头文件,其中有一个奇怪的?:
用法,下面是来自相应/ usr/include/C++ /的引用。 ..文件:奇怪的运算符?:decltype的用法
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的“The C++ Standard Library:A Tutorial and Reference,2nd ed。”,第125页。但是与我的GCC头文件相比,它的格式稍微简单一些。
什么是书btw? – manatttta
这里重要的是表达式的类型,而不是评估哪个部分。 – Mat
马特说什么。该表达式用于使用三元条件运算符类型演绎机制(您可以在这里阅读它(http://en.cppreference.com/w/cpp/language/operator_other))。 – StoryTeller