cout << sizeof(array<char,7>()) << endl;//输出 1,为什么?

2018-08-31 22:04:26 +08:00
 ngg0707

C++的一个问题,有人了解吗?

3000 次点击
所在节点    C
13 条回复
Monad
2018-08-31 23:17:08 +08:00
invalid application of 'sizeof' to a function type [-Werror=pointer-arith]
https://en.wikipedia.org/wiki/Most_vexing_parse
innoink
2018-08-31 23:24:58 +08:00
当成函数类型处理了,sizeof(void()) 也是 1
但是,“ sizeof cannot be used with function types, incomplete types, or bit-field glvalues. ”
个人认为是个 UB,这个 1 没什么实际意义
ngg0707
2018-09-01 00:24:39 +08:00
@innoink 谢谢🙏
ngg0707
2018-09-01 00:24:54 +08:00
@Monad 谢谢🙏
EricXuu
2018-09-01 00:42:49 +08:00
或者你本意是想这样?
```
cout << sizeof(new array<char,7>()) << endl;
```
geelaw
2018-09-01 01:39:00 +08:00
@EricXuu 他的意思应该是 sizeof *(new array<char, 7>())
ngg0707
2018-09-01 08:43:44 +08:00
@EricXuu 不是,做题的时候想到的,想测量一下 array 对象的内存占用空间
ngg0707
2018-09-01 08:44:20 +08:00
@geelaw 想测量一下 array 对象的内存占用空间,为什么不能这么测呢?
geelaw
2018-09-01 09:14:01 +08:00
@ngg0707 #8 我在 #6 的代码就是在测量 array 对象占用的空间。

至于为什么你的方法不行,#1 #2 已经解答了。

但 #6 和你原来的想法都是画蛇添足,因为 sizeof(T) 可以测量类型 T 的大小。
pezy
2018-09-01 15:15:23 +08:00
std::array<T> 占用内存空间和 T[] 是一样的。
ngg0707
2018-09-01 15:37:43 +08:00
@pezy 我想验证这个结果,但是貌似这样写不对……前面的人说是 UB。
ngg0707
2018-09-01 15:38:00 +08:00
@pezy 会被 sizeof 认为是一个函数
gnaggnoyil
2018-09-01 21:21:12 +08:00
@ngg0707 你得搞清楚一件事,sizeof 运算符接受的是一个类型而不是一个表达式更不是一个对象.至于为啥你的写法会被当成是一个类型声明而不是一个表达式,#1 #2 说的很清楚了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/485064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX