新加入的运算符是否有可能超载?类似于:
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 */ }
}
非常感谢任何愿意帮忙的人!
发布于 2018-11-21 19:58:13
不能使操作符new
过载成为constexpr
,主要问题在于C++标准指令§9.1.5/1 constexpr
说明符dcl.constexpr ( problem ):
constexpr
说明符只适用于变量或变量模板的定义或函数或函数模板的声明。使用constexpr
说明符声明的函数或静态数据成员隐含为内联函数或变量(9.1.6)。如果一个函数或函数模板的任何声明都有一个constexpr
说明符,那么它的所有声明都应该包含constexpr
说明符。
也就是说,为了重载操作符new
,它以前的所有声明也必须是constexpr
,而它们不是,因此,将其重载为constexpr
,您将得到一个编译时错误。
https://stackoverflow.com/questions/53419133
复制相似问题