首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新的就业机会?

新的就业机会?
EN

Stack Overflow用户
提问于 2017-01-10 23:05:33
回答 2查看 2.8K关注 0票数 27

C++标准特别禁止在常量表达式中调用new (N4296第5.20节expr.const):

条件表达式e是核心常量表达式,除非e的计算遵循抽象机器(1.9)的规则计算下列表达式之一: ..。 -新的-表达(5.3.4);

这项禁令(据我所知)扩展到所有形式的new,包括新的安置。但是,由于location实际上并没有分配任何内存,只是在给定的位置运行构造函数,而且由于在constexpr上下文中获取变量的地址是合法的(实际上,std::addressof将在C++17中保持不变),在我看来,这一禁令(至少在原则上是如此)可以放宽,以允许将新的位置放置在C++17函数中。

所以我的问题是,我是不是遗漏了什么?在constexpr函数中禁止放置新的位置有充分的理由吗?

(对于上下文:当前的规则几乎要求启用std::variant等启用常数的求和类型作为递归联合实现。如果能够使用std::aligned_storage之类的东西来安置新的东西会更好,但目前这是不可能的。)

EN

回答 2

Stack Overflow用户

发布于 2020-04-18 14:15:18

新位置并不能很好地与当前的constexpr世界相结合,因为它允许构建一个具有其底层字节表示(值初始化)的对象。这一点在标准中没有定义(两个补码甚至不是在警察中,作为提醒)。

看一看C++标准讨论,它还可以允许随后查看对象类型表示(因为您仍然持有字节数组)。

票数 1
EN

Stack Overflow用户

发布于 2018-04-25 17:46:35

没有任何概念上的原因,安置新的不能工作。我认为这是一种疏忽,新位置基本上只是对预定义内存位置中的构造函数的调用。

确保新参数具有有效的参数位置与确保对随机指针的写入是有效的并不难。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41580022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档