簡體   English   中英

三元表達的類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM