我在讀一本書,它解釋了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