所以我刚读了一篇关于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;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是这样的:
9
4294967295
20
13.5
2.5
40
1.6
4
13
8
Run Code Online (Sandbox Code Playgroud)
这是如何运作的?当我有两个整数类型,机器人4个字节,当做一个加法时,它如何变成9个字节?是由于+运营商的一个字节?但是,如果是这样,那么10-5是如何以4294的形式出现的呢?
Ant*_*ine 16
sizeof 5 + 5它被解析为(sizeof(5)) + 5而不是sizeof(5+5)由于运营商的优先级,因此它变为4 + 5和9.有关这方面的更多信息,比如克里斯说,请查看此表.
对于减法它是相同的,但由于表达式的类型size_t是无符号的,减法是在无符号整数上完成的,它包裹着2^32它4,294,967,296.Thererfore,sizeof 10 - 5是4 - 5其成为(4,294,967,296) - 132位无符号运算,这就是4,294,967,295你得到.
走得更远
在编译过程的解析步骤内部,每个源代码语句都转换为表达式树(通常称为AST),如果您对这些事情感到好奇,可以在这里查看例子.
要获得更实际的实践理解,请安装clang编译器并使用
clang -Xclang -ast-dump -fsyntax-only source.cpp
Run Code Online (Sandbox Code Playgroud)
它显示代码中的树.真的很好,但我推荐短代码,因为输出可能是压倒性的;否则;)
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |