![]() |
1
7
它只能在运行时知道这一点。想象一下它有点变化
但这不会发生。C++强调速度,但这基本上使它成为一种确保操作安全的语言。Java、C等已经解决了这个问题。 内核和设备驱动程序开发人员不想要一个聪明的语言运行时。他们只想让事情进展得更快。 看一看 Common undefined behavior in C++ 所有需要“修复”的问题。它不再是C++了! |
![]() |
2
19
不,不应该。声明的类型
|
![]() |
3
11
它之所以脆弱,是因为你站在一边,尽一切努力保护你的安全。在您有足够的经验了解这些问题产生的原因以及如何避免这些问题之前,您应该:
你可能还应该阅读C++ FAQ,并密切关注某一部分的含义:“即使X是Y,X的数组也不是Y的数组。” 编辑:至于您看到自己行为的原因,这非常简单:指针算术是根据静态类型而不是动态类型定义的。这意味着它完全基于您为指针定义的指针类型,而不是它所指向的类型。如果你说它指向一个A,然后再指向一个B,那么算术仍然会像你说的那样指向一个A。 |
![]() |
4
3
指针
|
![]() |
5
1
对象没有记录它们的大小,只是分配了内存。编译器知道如何在指针内存中处理对象的唯一方法是查看指针类型。因此,基于指针a*,它将只假设一个sizeof(a)的对象。 |
![]() |
6
1
由于与C数组的兼容性,降级为指针。类型
然后,您增加这个指针的值,这会增加
但是,如果指针未指向指针类型的元素数组,则假定递增指针是一个有效的操作,这是不正确的。 如果您尝试将C++中的部分结合起来,使它的行为与C一样,具有更强类型的OO特性,则C部分中的较松散类型将在C++部分中破坏更强的类型。最好将它们分开,或者至少记录下预期的行为。 |
![]() |
7
1
你在增加变量
由于sizeof(b)>sizeof(a),您最终指向第一个对象的中间。当C++添加适当的偏移量时,它将结束读取
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |