Sizeof和表达式?

 sbn3552505 发布于 2023-01-18 12:23

所以我刚读了一篇关于sizeof()C++书的章节.我读到的是,如果操作数是一个类型,你只需要sizeof之后的括号,你可以在有表达式时跳过括号,所以我做了自己的测试,看看这是怎么回事.我使用下面的代码来看看我会得到什么:

int main(){

    cout << sizeof 5 + 5<< endl;
    cout << sizeof 10 - 5<< endl;
    cout << sizeof 5 * 5<< endl;
    cout << sizeof 4.5 + 5.5<< endl;
    cout << sizeof 10.5 - 5.5<< endl;
    cout << sizeof 2.5 * 5<< endl;
    cout << sizeof 10.0 / 5.0<< endl;
    cout << endl;

    cout << sizeof 5 << endl;
    cout << sizeof 5.0 + 5.0 << endl;
    cout << sizeof 5.5 << endl; 

    return 0;
}

我得到的输出是这样的:

9
4294967295
20
13.5
2.5
40
1.6
4
13
8

这是如何运作的?当我有两个整数类型,机器人4个字节,当做一个加法时,它如何变成9个字节?是由于+运营商的一个字节?但是,如果是这样,那么10-5是如何以4294的形式出现的呢?

1 个回答
  • sizeof 5 + 5它被解析为(sizeof(5)) + 5而不是sizeof(5+5)由于运营商的优先级,因此它变为4 + 59.有关这方面的更多信息,比如克里斯说,请查看此表.

    对于减法它是相同的,但由于表达式的类型size_t是无符号的,减法是在无符号整数上完成的,它包裹着2^324,294,967,296.Thererfore,sizeof 10 - 54 - 5其成为(4,294,967,296) - 132位无符号运算,这就是4,294,967,295你得到.

    走得更远

    在编译过程的解析步骤内部,每个源代码语句都转换为表达式树(通常称为AST),如果您对这些事情感到好奇,可以在这里查看例子.

    要获得更实际的实践理解,请安装clang编译器并使用

    clang -Xclang -ast-dump -fsyntax-only source.cpp
    

    它显示代码中的树.真的很好,但我推荐短代码,因为输出可能是压倒性的;否则;)

    2023-01-18 12:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有