是否可以将新的运算符重载为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 */ }
}
在此先感谢任何愿意提供帮助的人!
答案 0 :(得分:4)
您不能使运算符new
重载为constexpr
,主要问题归因于C ++标准指令§9.1.5/ 1 constexpr
说明符[dcl .constexpr] (重点矿):
constexpr
说明符应仅应用于 变量或变量模板或函数的声明或 功能模板。用声明的函数或静态数据成员constexpr
说明符隐式是一个内联函数或变量 (9.1.6)。 如果函数或函数模板的任何声明具有constexpr
说明符,则其所有声明应包含constexpr
说明符。
也就是说,为了使运算符new
重载,其所有先前的声明也必须为constexpr
,它们不是,因此在constexpr
中重载它会导致编译时错误