簡體   English   中英

C++ 編譯器如何解釋字符串/字符中的比較邏輯?

[英]How do C++ compiler interpret comparison logic in string/character?

當我們比較字符串/字符格式的數字時,c++ 編譯器如何解釋它? 下面的例子將說明這一點。

#include <iostream>
using namespace std;

int main() {
// your code goes here
    if ('1'<'2')
        cout<<"true";
    return 0;
}

輸出是

true

編譯器內部發生了什么? 是否存在從字符串到整數的隱式轉換,就像我們使用字符引用數組中的索引一樣,

   arr['a']
=> arr[97]

'1'是 C++ 中的char類型,具有實現定義的值——盡管字符1的 ASCII 值很常見,並且不能為負。

表達式arr['a']定義為每個指針算術: *(arr + 'a') 如果這超出了數組的邊界,則程序的行為是未定義的。

請注意, '1' < '2'在任何平台上都是true 對於'a' < 'b'總是true雖然我從未遇到過true的平台,但不能true 也就是說,在 ASCII 中'A'小於'a' ,但在 EBCDIC(在所有變體中) 'A'大於'a'

"ab" < "cd"這樣的表達式的行為是未指定的 這是因為兩個const char[3]常量都衰減為const char*類型,並且未指定比較不指向同一數組中的對象的兩個指針的行為。

(最后一點:在 C 中'1''2''a'都是int類型。)

操作數'1''2'不是字符串,它們是char文字

字符表示char類型的特定數字,通常由ASCII 表定義,特別是49表示'1'50表示'2'

運算符<比較這些數字,並且由於'1'的數字表示小於'2'的數字表示,因此'1'<'2'true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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