首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Constexpr算子新

Constexpr算子新
EN

Stack Overflow用户
提问于 2018-11-21 19:18:35
回答 1查看 1.9K关注 0票数 5

新加入的运算符是否有可能超载?类似于:

代码语言:javascript
运行
复制
constexpr void * operator new( std::size_t count );

其原因是要在重载的操作符体内执行constexpr函数,其中count参数值将是输入数据.由于操作符是由以下人员调用的:

代码语言:javascript
运行
复制
SomeClass * foo = new SomeClass(); 

数据类型的大小是在编译时知道的,不是吗?(count== sizeof(SomeClass))所以计数可以看作是编译时间常数吗?

代码语言:javascript
运行
复制
constexpr void * operator new( std::size_t count )
{
  if constexpr ( count >= 10 ) { /* do some compile-time business */ }
}

非常感谢任何愿意帮忙的人!

EN

回答 1

Stack Overflow用户

发布于 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,您将得到一个编译时错误。

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

https://stackoverflow.com/questions/53419133

复制
相关文章

相似问题

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