任何人都可以解释我这段代码:
int a[]={1,2,3},b[]={6,7,8},c;
c=sizeof(!a+b);
cout<<c;
Run Code Online (Sandbox Code Playgroud)
我得到了输出:8.但我不明白为什么.
a并b在此上下文衰减到指针类型.
所以表达式!a+b是一种int*类型.我们需要进入一个更详细一点这里:!a实际上是一个bool类型,并添加到int*类型为int*类型(认为指针运算下的隐式转换bool成int).
sizeof(int*) 在你的平台上是8.
注:sizeof是始终在C++编译时进行评估.
你必须阅读sizeof(!a+b);从最内层到最外层的表达.
a衰败到int*.b 衰败到 int*!a属于类型bool,因为应用了逻辑NOT运算符
a.!a+b 是类型的 bool + int* --> int + int* --> int*所以你基本上做到了:
sizeof(int*)
Run Code Online (Sandbox Code Playgroud)
这是指针的大小,在你的系统中等于8.
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |