【发布时间】:2018-11-21 19:18:35
【问题描述】:
是否可以将 operator new 重载为 constexpr 函数?比如:
constexpr void * operator new( std::size_t count );
为什么要在重载的运算符主体内执行 constexpr 函数,其中 count 参数值将是输入数据......因为运算符被调用:
SomeClass * foo = new SomeClass();
数据类型的大小在编译时就知道了,不是吗? (count== sizeof(SomeClass)) 所以计数可以被认为是编译时间常数?
constexpr void * operator new( std::size_t count )
{
if constexpr ( count >= 10 ) { /* do some compile-time business */ }
}
非常感谢任何愿意提供帮助的人!
【问题讨论】:
-
constexpr 不能有副作用,所以这会是矛盾的
-
没有编译时动态内存分配这样的东西。根据定义,在编译时为程序分配内存只是指定运行时所需的静态内存量。如果您可以在编译时计算您的任务在运行时需要
N字节,那么只需有一个大小为N的正确对齐的static缓冲区。 -
反正也没关系。 [expr.const] 全面禁止常量表达式中的new-expression。
-
你想看看 C++2a 论文试图让一切都变成 constexpr。
-
@FrançoisAndrieux 阅读:open-std.org/JTC1/SC22/WG21/docs/papers/2018/p0784r1.html
标签: c++ c++17 constexpr if-constexpr