git*_*tha 1 c++ comparison literals string-comparison character-literals
当我们比较字符串/字符格式的数字时,c++ 编译器如何解释它?下面的例子将说明这一点。
#include <iostream>
using namespace std;
int main() {
// your code goes here
if ('1'<'2')
cout<<"true";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
true
Run Code Online (Sandbox Code Playgroud)
编译器内部发生了什么?是否存在从字符串到整数的隐式转换,就像我们使用字符引用数组中的索引一样,
arr['a']
=> arr[97]
Run Code Online (Sandbox Code Playgroud)
'1'是charC++ 中的一种类型,具有实现定义的值 - 尽管字符的 ASCII 值1很常见,但不能为负。
表达式arr['a']定义为每个指针算术:*(arr + 'a')。如果这超出了数组的边界,则程序的行为是未定义的。
请注意,这'1' < '2'是true在任何平台上。尽管我从未遇到过不存在的平台,但'a' < 'b'始终不能这样说。也就是说,在 ASCII中小于,但在 EBCDIC(在所有变体中)大于!truetrue'A''a''A''a'
表达式 like 的行为"ab" < "cd"是未指定的。这是因为两个const char[3]常量都衰减为const char*类型,并且未指定比较不指向同一数组中对象的两个指针的行为。
(最后一点:在 C 中'1','2', 和'a'都是int类型。)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |