自从接受了P0593用于低级对象操作的对象隐式创建以来,现在可以在C ++ 20中隐式创建对象。
提案中特别引入的措辞允许某些操作(例如std::malloc
)自动创建和启动某些类型的对象(称为隐式生命周期类型)的生存期,如果引入此类对象会导致具有其他未定义行为的程序具有定义的行为。参见[intro.object] / 10。
草案现在进一步指出,如果可以隐式创建多个这样的对象集以赋予程序定义的行为,则未指定创建这些对象集中的哪个。(有关的句子似乎没有出现在我可以访问的上一个提案修订版R5中,而是在提交草案中。)
实际上是否有一个程序可以针对这种隐式创建的对象集进行选择?换句话说,是否有一个程序通过此新规则具有已定义但未指定的行为,从而可以从输出中推断出创建了哪些隐式对象类型集(超过一个可能的类型)?
还是这句话只是为了阐明程序在抽象机上的执行(没有明显的影响)?
2
(OT)如果隐式创建的对象是int,我们可以将其称为“隐式int”吗?
—
MM
似乎不清楚在malloc时是否必须知道未指定集合中元素的选择
—
MM
@MM我假设set的选择被认为是整个程序在执行流程之外执行的抽象选择,但是创建直接在相关操作(即
—
胡桃木
std::malloc
)上进行,否则定义会出现问题递归地取决于未来。
我对该主题提出了另一个问题,stackoverflow.com/ questions/ 60627249 。当然会想到更多的推论,但一次有一个问题..
—
MM
该提案声称不可能如此区分,这很重要,因为没有办法“正确地”做出选择,只有避免这种情况的优化才是(非常严格)有效的。
—
戴维斯鲱鱼