【问题标题】:Why can't a placement-new expression be a constant expression?为什么placement-new 表达式不能是常量表达式?
【发布时间】:2022-10-08 17:55:44
【问题描述】:

根据[expr.const]/5.18:

表达式 E 是核心常量表达式,除非 E 的评估遵循抽象机 ([intro.execution]) 的规则,将评估以下之一:

  • new 表达式 ([expr.new]),除非选定的分配函数是可替换的全局分配函数 ([new.delete.single], [new.delete.array]) 并且分配的存储在E的评价;

Placement-new 表达式不是常量表达式。

为了解决这个问题,C++20 添加了std::construct_at。那么为什么不能将placement-new 表达式设为常量表达式呢?

【问题讨论】:

标签: c++ c++20 placement-new constant-expression


【解决方案1】:

它遵循from:

在对常量表达式求值期间,调用分配 函数总是被省略。只有新的表达式,否则 导致调用可替换的全局分配函数可 在常量表达式中求值。

简而言之,placement new 在这里不符合条件(提示:由于没有使用replaceable allocation function)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2019-11-13
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2019-06-22
    相关资源
    最近更新 更多