[英]Type of ternary expression
任何人都可以解釋以下程序的輸出:
#include <iostream>
using namespace std;
int main()
{
int test = 0;
cout << "First character " << '1' << endl;
cout << "Second character " << (test ? 3 : '1') << endl;
return 0;
}
輸出:
第一個角色1
第二個角色49
但是兩個printf
語句都應該打印相同的行。
表達式'1'
的類型是char
。
表達式的類型(test ? 3 : '1')
至少為int
(或其無符號版本;可移植的是std::common_type_t<int, char>
)。
因此, <<
運算符的兩次調用選擇不同的重載:前者按原樣打印字符,后者將整數格式化為十進制字符串表示。 (字符'1'
的整數值由基本字符集定義。)
在推導出適當的<<operator
之后, cout
將顯示(test ? 3 : '1')
表達式的值。 在這種情況下,它是int
,你可以使用Scott Meyers在他最新書中傳播的好技巧來檢查它:
template < typename T > class TD; // Type Displayer
int main()
{
int test = 0;
TD<decltype((test ? 3 : '1'))> xType;
return 0;
}
這會生成錯誤,這也會為您提供表達式類型的信息:
main.cpp:6:34:錯誤:聚合'TD < int > xType'的類型不完整,無法定義TD xType;
這是int
。 而static_cast<int>('1')
是49。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.