c++里,中文的大小比较是怎样的?​

发布于 2021-11-29 07:46:41 字数 342 浏览 802 评论 6

大家好,本人初学C++,使用的编译器:

gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

下面代码,为何是为何输出是if的代码块?也就是说c++里,中文的大小比较是怎样的?

if ("刘备" < "曹操")

        cout << "that is rightn";
    else {
        cout << "why is thatn";
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

卸妝后依然美 2021-11-30 07:02:55

少年你想多了,刘备和曹操分别是两个常指针,因此该if比较的是两个静态区指针的大小,结果取决于编译器的个人爱好,这个问题你应该问你的编译器

混吃等死 2021-11-30 06:56:14

引用来自“eel”的评论

你可以把 "刘备"  "曹操" 的地址都打印出来,把字符串的编码也打出来分析一下

反话 2021-11-30 05:38:46

这。比的是const char *,C++用std::string::compare来实现吧

私藏温柔 2021-11-30 05:05:56

你可以把 "刘备"  "曹操" 的地址都打印出来,把字符串的编码也打出来分析一下

绝影如岚 2021-11-29 16:53:48

没有这么写过。。。

但我估计这是比的字符串地址吧?

如果用strcmp()是比较的字符串内容

虐人心 2021-11-29 12:10:32

存储成tst.cc,然后:

g++ -g tst.cc -o tst.dbg

objdump -SD tst.dbg > tst.asm

然后打开tst.asm,找到你比较两个字符串的代码,应该会是这样子的:

if ("刘备" < "曹操")
  400781:	b8 94 08 40 00       	mov    $0x400894,%eax
  400786:	48 3d 9b 08 40 00    	cmp    $0x40089b,%rax
  40078c:	73 11                	jae    40079f <main+0x22>

大致的意思是说把0x400894和0x40089b两个数字扔到寄存器里比较一下,嗯,其实你自己瞅也能瞅出来,而这两个地址指向的内容则负责将这些汉字弄到内存里,当然,他们跟最后的比较毛关系没有

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文