[英]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
類型。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.