|
|
1
8
即使在这种特殊情况下,类成员和数组保证具有相同的地址(基于 [basic.compound]/4.3 再加上 requirements on new-expression s 除了将对象放在缓冲区的开头之外,不允许编译器执行任何操作),我很确定这是未定义的行为。 我相信相关的标准是 basic.memobj §1 :
mem初始化器
对于构造函数中的成员,类中也没有默认的初始值设定项,因此,该成员将被默认初始化
[class.base.init/9.3]
no initialization will be performed for them
basic.indet §2
适用于数组内容的任何使用(在
|
|
|
2
2
构造对象后缓冲区的状态未定义。编译器可以自由编写
|
|
|
3
1
显然,自从placement new首次标准化以来的几十年中,编译器的理念发生了变化,按位导入很有用,但编译器无法可靠地支持它的情况更为常见。一个合理的解决方案是添加两种新的语法形式——一种是要求编译器导入位模式,另一种是明确声明位模式不重要——因为程序员可能比编译器编写者更了解位模式是否重要。然而,到目前为止,这种情况还没有发生,使得像您这样的结构处于尴尬的状态,即某些实现可以有效地支持您的结构,而其他实现则不能有效地支持您的结构,并且没有任何好的方法来识别支持它们的实现。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |